Board.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { SettingsSvg } from '../_shared/svg/SettingsSvg';
  2. import { SearchInput } from '../_shared/SearchInput';
  3. import { BoardBlock } from './BoardBlock';
  4. import { NewBoardBlock } from './NewBoardBlock';
  5. import { useDatabase } from '../_shared/database-hooks/useDatabase';
  6. import { ViewLayoutTypePB } from '@/services/backend';
  7. import { DragDropContext } from 'react-beautiful-dnd';
  8. import { useState } from 'react';
  9. import { RowInfo } from '$app/stores/effects/database/row/row_cache';
  10. import { EditRow } from '$app/components/_shared/EditRow/EditRow';
  11. export const Board = ({ viewId }: { viewId: string }) => {
  12. const { controller, rows, groups, groupByFieldId, onNewRowClick, onDragEnd } = useDatabase(
  13. viewId,
  14. ViewLayoutTypePB.Board
  15. );
  16. const [showBoardRow, setShowBoardRow] = useState(false);
  17. const [boardRowInfo, setBoardRowInfo] = useState<RowInfo>();
  18. const onOpenRow = (rowInfo: RowInfo) => {
  19. setBoardRowInfo(rowInfo);
  20. setShowBoardRow(true);
  21. };
  22. return (
  23. <>
  24. <div className='flex w-full items-center justify-between'>
  25. <div className={'flex items-center text-xl font-semibold'}>
  26. <div>{'Kanban'}</div>
  27. <button className={'ml-2 h-5 w-5'}>
  28. <SettingsSvg></SettingsSvg>
  29. </button>
  30. </div>
  31. <div className='flex shrink-0 items-center gap-4'>
  32. <SearchInput />
  33. </div>
  34. </div>
  35. <DragDropContext onDragEnd={onDragEnd}>
  36. <div className={'relative w-full flex-1 overflow-auto'}>
  37. <div className={'absolute flex h-full flex-shrink-0 items-start justify-start gap-4'}>
  38. {controller &&
  39. groups &&
  40. groups.map((group, index) => (
  41. <BoardBlock
  42. key={group.groupId}
  43. viewId={viewId}
  44. controller={controller}
  45. group={group}
  46. allRows={rows}
  47. groupByFieldId={groupByFieldId}
  48. onNewRowClick={() => onNewRowClick(index)}
  49. onOpenRow={onOpenRow}
  50. />
  51. ))}
  52. <NewBoardBlock onClick={() => console.log('new block')}></NewBoardBlock>
  53. </div>
  54. </div>
  55. </DragDropContext>
  56. {controller && showBoardRow && boardRowInfo && (
  57. <EditRow
  58. onClose={() => setShowBoardRow(false)}
  59. viewId={viewId}
  60. controller={controller}
  61. rowInfo={boardRowInfo}
  62. ></EditRow>
  63. )}
  64. </>
  65. );
  66. };