Board.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { SettingsSvg } from '../_shared/svg/SettingsSvg';
  2. import { SearchInput } from '../_shared/SearchInput';
  3. import { BoardGroup } from './BoardGroup';
  4. import { NewBoardBlock } from './NewBoardBlock';
  5. import { useDatabase } from '../_shared/database-hooks/useDatabase';
  6. import { ViewLayoutPB } 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. import { BoardToolbar } from '$app/components/board/BoardToolbar';
  12. export const Board = ({ viewId, title }: { viewId: string; title: string }) => {
  13. const { controller, rows, groups, groupByFieldId, onNewRowClick, onDragEnd } = useDatabase(viewId, ViewLayoutPB.Board);
  14. const [showBoardRow, setShowBoardRow] = useState(false);
  15. const [boardRowInfo, setBoardRowInfo] = useState<RowInfo>();
  16. const onOpenRow = (rowInfo: RowInfo) => {
  17. setBoardRowInfo(rowInfo);
  18. setShowBoardRow(true);
  19. };
  20. return (
  21. <>
  22. <div className='flex w-full items-center justify-between'>
  23. <BoardToolbar title={title} />
  24. <div className='flex shrink-0 items-center gap-4'>
  25. <SearchInput />
  26. </div>
  27. </div>
  28. <DragDropContext onDragEnd={onDragEnd}>
  29. <div className={'relative w-full flex-1 overflow-auto'}>
  30. <div className={'absolute flex h-full flex-shrink-0 items-start justify-start gap-4'}>
  31. {controller &&
  32. groups &&
  33. groups.map((group, index) => (
  34. <BoardGroup
  35. key={group.groupId}
  36. viewId={viewId}
  37. controller={controller}
  38. group={group}
  39. allRows={rows}
  40. groupByFieldId={groupByFieldId}
  41. onNewRowClick={() => onNewRowClick(index)}
  42. onOpenRow={onOpenRow}
  43. />
  44. ))}
  45. <NewBoardBlock onClick={() => console.log('new block')}></NewBoardBlock>
  46. </div>
  47. </div>
  48. </DragDropContext>
  49. {controller && showBoardRow && boardRowInfo && (
  50. <EditRow
  51. onClose={() => setShowBoardRow(false)}
  52. viewId={viewId}
  53. controller={controller}
  54. rowInfo={boardRowInfo}
  55. ></EditRow>
  56. )}
  57. </>
  58. );
  59. };