mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
43 lines
1.8 KiB
TypeScript
43 lines
1.8 KiB
TypeScript
import {
|
|
ItemTableListInnerColumn,
|
|
TableColumnContainer,
|
|
} from '/@/renderer/components/item-list/item-table-list/item-table-list-column';
|
|
import { ItemListItem } from '/@/renderer/components/item-list/types';
|
|
import { useIsMutatingRating } from '/@/renderer/features/shared/mutations/set-rating-mutation';
|
|
import { Rating } from '/@/shared/components/rating/rating';
|
|
|
|
export const RatingColumn = (props: ItemTableListInnerColumn) => {
|
|
const rowItem = props.getRowItem?.(props.rowIndex) ?? (props.data as any[])[props.rowIndex];
|
|
const row: null | number | undefined = rowItem?.[props.columns[props.columnIndex].id];
|
|
|
|
const isMutatingRating = useIsMutatingRating();
|
|
|
|
if (typeof row === 'number' || row === null) {
|
|
return (
|
|
<TableColumnContainer {...props}>
|
|
<Rating
|
|
className={row ? undefined : 'hover-only-flex'}
|
|
onChange={(rating) => {
|
|
const item = rowItem as ItemListItem;
|
|
const rowId = props.internalState.extractRowId(item);
|
|
const index = rowId ? props.internalState.findItemIndex(rowId) : -1;
|
|
props.controls.onRating?.({
|
|
event: null,
|
|
index,
|
|
internalState: props.internalState,
|
|
item,
|
|
itemType: props.itemType,
|
|
rating,
|
|
});
|
|
}}
|
|
readOnly={isMutatingRating}
|
|
size="xs"
|
|
value={row || 0}
|
|
/>
|
|
</TableColumnContainer>
|
|
);
|
|
}
|
|
|
|
return <TableColumnContainer {...props}> </TableColumnContainer>;
|
|
};
|