Skip to content

Commit

Permalink
feat(core): create record in kanban lane
Browse files Browse the repository at this point in the history
  • Loading branch information
nichenqin committed Jan 2, 2023
1 parent 9a99222 commit 934463e
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import type { ICreateRecordInput, Table as CoreTable } from '@egodb/core'
import { createRecordCommandInput } from '@egodb/core'
import { Drawer, zodResolver } from '@egodb/ui'
import { useAtom } from 'jotai'
import { useAtom, useAtomValue } from 'jotai'
import useDeepCompareEffect from 'use-deep-compare-effect'
import { useConfirmModal } from '../../hooks'
import { CreateRecordForm } from './create-record-form'
import { CreateRecordFormProvider, useCreateRecord } from './create-record-form-context'
import { createRecordInitialValueAtom } from './create-record-initial-value.atom'
import { createRecordFormDrawerOpened } from './drawer-opened.atom'

interface IProps {
Expand All @@ -14,13 +15,14 @@ interface IProps {

export const CreateRecordFormDrawer: React.FC<IProps> = ({ table }) => {
const [opened, setOpened] = useAtom(createRecordFormDrawerOpened)
const initialCreateRecordValue = useAtomValue(createRecordInitialValueAtom)

const initialValues: ICreateRecordInput = {
tableId: table.id.value,
value: table.schema.fields.map((field) => ({
name: field.name.value,
// TODO: get field default value
value: field.type === 'bool' ? false : null,
value: initialCreateRecordValue[field.name.value] ?? (field.type === 'bool' ? false : null),
})),
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import type { ICreateFieldValueObject } from '@egodb/core'
import { atom } from 'jotai'

export const createRecordInitialValueAtom = atom<ICreateFieldValueObject>({})
20 changes: 19 additions & 1 deletion apps/web/components/kanban-ui/kanban-lane.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
import { defaultAnimateLayoutChanges, useSortable } from '@dnd-kit/sortable'
import { ActionIcon, Card, Group, IconGripVertical, Stack, Text } from '@egodb/ui'
import { ActionIcon, Card, Group, IconGripVertical, IconRowInsertTop, Stack, Text } from '@egodb/ui'
import { CSS } from '@dnd-kit/utilities'
import type { CSSProperties } from 'react'
import { useMemo } from 'react'
import type { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core'
import type { QueryRecords, SelectField } from '@egodb/core'
import { KanbanCard } from './card'
import type { Table } from '@egodb/core'
import { useSetAtom } from 'jotai'
import { createRecordFormDrawerOpened } from '../create-record-form/drawer-opened.atom'
import { createRecordInitialValueAtom } from '../create-record-form/create-record-initial-value.atom'

interface IProps {
id: string | null
Expand Down Expand Up @@ -35,6 +38,17 @@ export const KanbanLane: React.FC<IKanbanLaneProps> = ({
records,
}) => {
const filteredRecords = useMemo(() => records.filter((r) => r.values[field.name.value] === id), [records])

const setOpened = useSetAtom(createRecordFormDrawerOpened)
const setCreateRecordInitialValue = useSetAtom(createRecordInitialValueAtom)

const onCreateRecord = () => {
setOpened(true)
if (id) {
setCreateRecordInitialValue({ [field.name.value]: id })
}
}

return (
<Card ref={setNodeRef} style={style} withBorder shadow="xs" radius="sm" w={350}>
<Card.Section withBorder inheritPadding py="sm">
Expand All @@ -51,6 +65,10 @@ export const KanbanLane: React.FC<IKanbanLaneProps> = ({

<Card.Section withBorder inheritPadding p="sm" bg="gray.0" mih={400}>
<Stack>
<ActionIcon w="100%" color="blue" variant="outline" onClick={onCreateRecord}>
<IconRowInsertTop />
</ActionIcon>

{filteredRecords.map((r) => (
<KanbanCard table={table} record={r} key={r.id} />
))}
Expand Down
4 changes: 4 additions & 0 deletions packages/core/field/field.type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ import {
stringTypeSchema,
} from './string-field.type'
import type { FieldId, FieldName, FieldValueConstraints } from './value-objects'
import { fieldNameSchema } from './value-objects'

export const createFieldSchema = z.discriminatedUnion(FIELD_TYPE_KEY, [
createStringFieldSchema,
Expand Down Expand Up @@ -123,6 +124,9 @@ export const createFieldValueSchema = z.union([
])
export type ICreateFieldValue = z.infer<typeof createFieldValueSchema>

export const createFieldValueObject = z.record(fieldNameSchema, createFieldValueSchema)
export type ICreateFieldValueObject = z.infer<typeof createFieldValueObject>

export const createFieldValueSchema_internal = z.discriminatedUnion(FIELD_TYPE_KEY, [
createStringFieldValue_internal,
createNumberFieldValue_internal,
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/Button.tsx
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export { Button, UnstyledButton, ActionIcon } from '@mantine/core'
export { Button, UnstyledButton, ActionIcon, ActionIconProps } from '@mantine/core'

0 comments on commit 934463e

Please sign in to comment.