| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 'use client';
- import { type ComponentRenderProps } from '@json-render/react';
- import { useData } from '@json-render/react';
- import { getByPath } from '@json-render/core';
- export function Select({ element }: ComponentRenderProps) {
- const { label, valuePath, options, placeholder } = element.props as {
- label: string;
- valuePath: string;
- options: Array<{ value: string; label: string }>;
- placeholder?: string | null;
- };
- const { data, set } = useData();
- const value = getByPath(data, valuePath) as string | undefined;
- return (
- <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
- <label style={{ fontSize: 14, fontWeight: 500 }}>{label}</label>
- <select
- value={value ?? ''}
- onChange={(e) => set(valuePath, e.target.value)}
- style={{
- padding: '8px 12px',
- borderRadius: 'var(--radius)',
- border: '1px solid var(--border)',
- background: 'var(--card)',
- color: 'var(--foreground)',
- fontSize: 14,
- outline: 'none',
- }}
- >
- {placeholder && <option value="">{placeholder}</option>}
- {options.map((opt) => (
- <option key={opt.value} value={opt.value}>{opt.label}</option>
- ))}
- </select>
- </div>
- );
- }
|