Home / Function/ WrapperDynamicColumns() — supabase Function Reference

WrapperDynamicColumns() — supabase Function Reference

Architecture documentation for the WrapperDynamicColumns() function in WrapperDynamicColumns.tsx from the supabase codebase.

Entity Profile

Dependency Diagram

graph TD
  670bebde_dcf9_2c71_1e7b_5ea375a7172b["WrapperDynamicColumns()"]
  7ef53817_d994_22d0_90d4_f40411bd93d8["getColumns()"]
  670bebde_dcf9_2c71_1e7b_5ea375a7172b -->|calls| 7ef53817_d994_22d0_90d4_f40411bd93d8
  style 670bebde_dcf9_2c71_1e7b_5ea375a7172b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

apps/studio/components/interfaces/Integrations/Wrappers/WrapperDynamicColumns.tsx lines 49–158

const WrapperDynamicColumns = ({
  initialColumns = DEFAULT_INITIAL_COLUMNS,
  onChange,
  errors = {},
}: WrapperDynamicColumnsProps) => {
  const [state, dispatch] = useReducer(
    (state: State, action: Action) => {
      switch (action.type) {
        case 'ADD_COLUMN':
          return {
            ...state,
            columns: {
              ...state.columns,
              [state.nextId]: { id: state.nextId, name: '', type: 'text' },
            },
            nextId: state.nextId + 1,
          }
        case 'REMOVE_COLUMN':
          return {
            ...state,
            columns: Object.fromEntries(
              Object.entries(state.columns).filter(([key]) => Number(key) !== action.payload.id)
            ),
          }
        case 'UPDATE_COLUMN':
          return {
            ...state,
            columns: {
              ...state.columns,
              [action.payload.id]: {
                ...state.columns[action.payload.id],
                [action.payload.key]: action.payload.value,
              },
            },
          }
        default:
          return state
      }
    },
    {
      columns: Object.fromEntries(
        initialColumns.map((column, index) => [index, { ...column, id: index }])
      ),
      nextId: initialColumns.length,
    }
  )

  const onChangeRef = useLatest(onChange)
  useEffect(() => {
    onChangeRef.current?.(getColumns(state.columns))
  }, [state.columns])

  const onAddColumn = () => {
    dispatch({ type: 'ADD_COLUMN' })
  }

  const onRemoveColumn = (id: number) => {
    dispatch({ type: 'REMOVE_COLUMN', payload: { id } })
  }

  const onUpdateValue = (id: number, key: keyof SimpleColumn, value: string) => {
    dispatch({ type: 'UPDATE_COLUMN', payload: { id, key, value } })
  }

  const columns = getColumns(state.columns)

  return (
    <div className="w-full flex flex-col gap-4">
      <div className="flex flex-col gap-4">
        {columns.map((column, idx) => (
          <div key={column.id} className="flex flex-col">
            <div className="flex items-center gap-x-2">
              <Input
                className="flex-1 [&_label]:!p-0"
                layout="vertical"
                label="Name"
                value={column.name}
                onChange={(e) => onUpdateValue(column.id, 'name', e.target.value)}
              />

              <div className="flex-1">
                <ColumnType
                  value={column.type}
                  enumTypes={[]}
                  onOptionSelect={(value) => onUpdateValue(column.id, 'type', value)}
                  className="[&_label]:!p-0"
                />
              </div>

              <Button
                type="outline"
                icon={<X strokeWidth={1.5} />}
                onClick={() => onRemoveColumn(column.id)}
                className="self-end -translate-y-1.5 px-1.5"
              />
            </div>

            {errors[`columns.${idx}`] && (
              <span className="text-red-900 text-sm mt-2">{errors[`columns.${idx}`]}</span>
            )}
          </div>
        ))}
      </div>

      <Button type="default" onClick={() => onAddColumn()} className="self-start">
        Add column
      </Button>
    </div>
  )
}

Subdomains

Calls

Frequently Asked Questions

What does WrapperDynamicColumns() do?
WrapperDynamicColumns() is a function in the supabase codebase.
What does WrapperDynamicColumns() call?
WrapperDynamicColumns() calls 1 function(s): getColumns.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free