Board.tsx 2.3 KB

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