BoardCard.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { Details2Svg } from '../_shared/svg/Details2Svg';
  2. import { RowInfo } from '../../stores/effects/database/row/row_cache';
  3. import { useRow } from '../_shared/database-hooks/useRow';
  4. import { DatabaseController } from '../../stores/effects/database/database_controller';
  5. import { BoardCell } from './BoardCell';
  6. import { Draggable } from 'react-beautiful-dnd';
  7. export const BoardCard = ({
  8. index,
  9. viewId,
  10. controller,
  11. rowInfo,
  12. onOpenRow,
  13. }: {
  14. index: number;
  15. viewId: string;
  16. controller: DatabaseController;
  17. rowInfo: RowInfo;
  18. onOpenRow: (rowId: RowInfo) => void;
  19. }) => {
  20. const { cells } = useRow(viewId, controller, rowInfo);
  21. return (
  22. <Draggable draggableId={rowInfo.row.id} index={index}>
  23. {(provided) => (
  24. <div
  25. ref={provided.innerRef}
  26. {...provided.draggableProps}
  27. {...provided.dragHandleProps}
  28. onClick={() => onOpenRow(rowInfo)}
  29. className={`relative cursor-pointer select-none rounded-lg border border-shade-6 bg-white px-3 py-2 transition-transform duration-100 hover:bg-main-selector `}
  30. >
  31. <button className={'absolute right-4 top-2.5 h-5 w-5 rounded hover:bg-surface-2'}>
  32. <Details2Svg></Details2Svg>
  33. </button>
  34. <div className={'flex flex-col gap-3'}>
  35. {cells.map((cell, cellIndex) => (
  36. <BoardCell
  37. key={cellIndex}
  38. cellIdentifier={cell.cellIdentifier}
  39. cellCache={controller.databaseViewCache.getRowCache().getCellCache()}
  40. fieldController={controller.fieldController}
  41. ></BoardCell>
  42. ))}
  43. </div>
  44. </div>
  45. )}
  46. </Draggable>
  47. );
  48. };