@nnkogift/dhis2-form-utils-dhis2-ui 0.1.0-alpha.0 → 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +558 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.js +541 -39
- package/dist/index.js.map +1 -1
- package/package.json +10 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/fields/widgets/TextField.tsx","../src/fields/widgets/LongTextField.tsx","../src/fields/widgets/NumericFields.tsx","../src/fields/widgets/DateFields.tsx","../src/fields/widgets/ChoiceFields.tsx","../src/fields/widgets/UnsupportedField.tsx","../src/fields/D2Field.tsx","../src/components/FormSection.tsx","../src/components/FormFeedback.tsx"],"names":["resolveFieldValidation","jsx","InputField","jsxs","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2TextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import { TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2LongTextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <TextAreaField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { InputField } from '@dhis2/ui';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport { D2TextField } from './TextField';\n\nfunction D2TypedTextField({ control, type }: WidgetProps & { type?: 'email' | 'tel' | 'number' }) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type={type}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2EmailField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"email\" />;\n}\n\nexport function D2PhoneField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"tel\" />;\n}\n\nexport function D2NumberField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2IntegerField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2PercentageField({ control }: WidgetProps) {\n return (\n <D2TextField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n label: `${control.fieldConfig.label} (%)`,\n },\n }}\n />\n );\n}\n","import { CalendarInput, InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { computeAgeFromDob, resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nconst todayIso = (): string => new Date().toISOString().slice(0, 10);\n\ntype DateSelectPayload = {\n calendarDateString?: string;\n} | null;\n\nconst readDatePart = (value: string): string => {\n if (!value) return '';\n return value.includes('T') ? value.slice(0, 10) : value;\n};\n\nconst readTimePart = (value: string): string => {\n if (!value.includes('T')) return '';\n return value.slice(11, 16);\n};\n\nexport function D2DateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const dateValue = field.value as string;\n\n return (\n <CalendarInput\n name={field.name}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={dateValue || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n field.onChange(payload?.calendarDateString ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2TimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2DateTimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const datePart = readDatePart(value);\n const timePart = readTimePart(value);\n\n const commit = (nextDate: string, nextTime: string) => {\n if (!nextDate && !nextTime) {\n field.onChange('');\n return;\n }\n field.onChange(`${nextDate}T${nextTime || '00:00'}`);\n };\n\n return (\n <div>\n <CalendarInput\n name={`${field.name}-date`}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={datePart || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n commit(payload?.calendarDateString ?? '', timePart);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-time`}\n value={timePart}\n label={`${fieldConfig.label} (time)`}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n onChange={({ value: nextTime }) => {\n commit(datePart, nextTime ?? '');\n }}\n onBlur={field.onBlur}\n />\n </div>\n );\n}\n\nexport function D2AgeField({ control }: WidgetProps) {\n const age = computeAgeFromDob(control.field.value as string);\n const helpText = [control.fieldConfig.description, age ? `Age: ${age} years` : undefined]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <D2DateField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n description: helpText || control.fieldConfig.description,\n },\n }}\n />\n );\n}\n","import {\n CheckboxField,\n MultiSelectField,\n MultiSelectOption,\n Radio,\n SingleSelectField,\n SingleSelectOption,\n} from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n joinMultiTextValue,\n parseMultiTextValue,\n resolveFieldValidation,\n} from '@nnkogift/dhis2-form-utils-hooks';\n\nconst BOOLEAN_OPTIONS = [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n] as const;\n\nconst RADIO_RENDER_HINTS = new Set(['RADIO', 'VERTICAL_RADIOBUTTONS', 'HORIZONTAL_RADIOBUTTONS']);\n\n// fallow-ignore-next-line complexity\nexport function D2BooleanField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = isMandatory\n ? [...BOOLEAN_OPTIONS]\n : [...BOOLEAN_OPTIONS, { label: '—', value: '' }];\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {options.map((option) => (\n <Radio\n key={option.label}\n name={field.name}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n ))}\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n\nexport function D2TrueOnlyField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <CheckboxField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n checked={field.value === 'true'}\n onChange={({ checked }) => {\n field.onChange(checked ? 'true' : '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2SelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map(\n (option) => ({\n label: option.label,\n value: option.code,\n })\n );\n\n if (fieldConfig.renderTypeHint && RADIO_RENDER_HINTS.has(fieldConfig.renderTypeHint)) {\n return (\n <fieldset>\n <legend>{fieldConfig.label}</legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {options.map((option) => (\n <Radio\n key={option.value}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n />\n ))}\n {validationText ? <p>{validationText}</p> : null}\n </fieldset>\n );\n }\n\n return (\n <SingleSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={field.value as string}\n onChange={({ selected }) => {\n field.onChange(selected);\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <SingleSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </SingleSelectField>\n );\n}\n\nexport function D2MultiSelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map(\n (option) => ({\n label: option.label,\n value: option.code,\n })\n );\n const selected = parseMultiTextValue(field.value as string);\n\n return (\n <MultiSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={selected}\n onChange={({ selected: nextSelected }) => {\n field.onChange(joinMultiTextValue(nextSelected));\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <MultiSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </MultiSelectField>\n );\n}\n","import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2UnsupportedField({ control }: WidgetProps) {\n const { fieldConfig, field, widgetKind, isMandatory } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={`Widget not yet implemented: ${widgetKind}`}\n required={isMandatory}\n disabled\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","// fallow-ignore-file code-duplication\nimport {\n type FieldControlInput,\n useFieldControl,\n type WidgetProps,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport type { WidgetKind } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ComponentType } from 'react';\nimport {\n D2AgeField,\n D2BooleanField,\n D2DateField,\n D2DateTimeField,\n D2EmailField,\n D2IntegerField,\n D2LongTextField,\n D2MultiSelectField,\n D2NumberField,\n D2PercentageField,\n D2PhoneField,\n D2SelectField,\n D2TextField,\n D2TimeField,\n D2TrueOnlyField,\n D2UnsupportedField,\n} from './widgets';\n\nexport type D2FieldProps = {\n field: FieldControlInput;\n};\n\nexport type D2FieldWidgetProps = WidgetProps;\n\nconst WIDGET_BY_KIND: Record<WidgetKind, ComponentType<WidgetProps>> = {\n text: D2TextField,\n longText: D2LongTextField,\n email: D2EmailField,\n phone: D2PhoneField,\n number: D2NumberField,\n integer: D2IntegerField,\n percentage: D2PercentageField,\n boolean: D2BooleanField,\n trueOnly: D2TrueOnlyField,\n date: D2DateField,\n time: D2TimeField,\n age: D2AgeField,\n select: D2SelectField,\n multiSelect: D2MultiSelectField,\n datetime: D2DateTimeField,\n coordinate: D2UnsupportedField,\n orgUnit: D2UnsupportedField,\n file: D2UnsupportedField,\n image: D2UnsupportedField,\n unsupported: D2UnsupportedField,\n};\n\n/** Dispatches an already-resolved `FieldControlReturn` to its widget component, without re-deriving field control state. Reused by consumers that build their own chrome (labels, badges, ghost placeholders) around a field. */\nexport function D2FieldWidget({ control }: D2FieldWidgetProps) {\n const Widget = WIDGET_BY_KIND[control.widgetKind];\n return <Widget control={control} />;\n}\n\nexport function D2Field({ field }: D2FieldProps) {\n const fieldControl = useFieldControl({ ...field });\n\n if (fieldControl.isHidden) return null;\n\n return <D2FieldWidget control={fieldControl} />;\n}\n","import { useSectionState } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ReactNode } from 'react';\n\nexport type FormSectionProps = {\n sectionId: string;\n children: ReactNode;\n};\n\nexport function FormSection({ sectionId, children }: FormSectionProps) {\n const state = useSectionState(sectionId);\n\n if (state.hidden) {\n return null;\n }\n\n return <>{children}</>;\n}\n","import { NoticeBox } from '@dhis2/ui';\nimport { useFormFeedback } from '@nnkogift/dhis2-form-utils-hooks';\n\ntype FeedbackItem = ReturnType<typeof useFormFeedback>[string];\n\nfunction FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[] }) {\n if (!items.length) {\n return null;\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacers-dp16)' }}>\n <h3 style={{ margin: '0 0 var(--spacers-dp8)' }}>{title}</h3>\n {items.map((item) => (\n <NoticeBox key={`${item.location}:${item.content}`} title={item.content}>\n {item.value ? (\n <>\n <strong>{item.content}</strong>: {item.value}\n </>\n ) : (\n item.content\n )}\n </NoticeBox>\n ))}\n </div>\n );\n}\n\nexport function FormFeedback() {\n const feedback = useFormFeedback();\n const items = Object.values(feedback);\n const feedbackItems = items.filter((item) => item.location === 'feedback');\n const indicatorItems = items.filter((item) => item.location === 'indicators');\n\n if (!feedbackItems.length && !indicatorItems.length) {\n return null;\n }\n\n return (\n <div>\n <FeedbackPanel title=\"Feedback\" items={feedbackItems} />\n <FeedbackPanel title=\"Program indicators\" items={indicatorItems} />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/fields/widgets/TextField.tsx","../src/fields/widgets/LongTextField.tsx","../src/fields/widgets/NumericFields.tsx","../src/fields/widgets/DateFields.tsx","../src/fields/widgets/ChoiceFields.tsx","../src/fields/widgets/OrgUnitField.tsx","../src/fields/widgets/FileFields.tsx","../../../packages/map/src/coordinateValue.ts","../../../packages/map/src/geojsonValue.ts","../../../packages/map/src/defaultMapStyle.ts","../../../packages/map/src/useMapLibreMap.ts","../../../packages/map/src/CoordinateMapPicker.tsx","../../../packages/map/src/GeoJsonMapEditor.tsx","../src/fields/widgets/MapFields.tsx","../src/fields/widgets/UnsupportedField.tsx","../src/fields/D2Field.tsx","../src/components/FormSection.tsx","../src/components/FormFeedback.tsx"],"names":["resolveFieldValidation","jsx","InputField","jsxs","useState","MapLibreMap","useRef","useEffect","TextAreaField","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2TextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import { TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2LongTextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <TextAreaField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { InputField } from '@dhis2/ui';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport { D2TextField } from './TextField';\n\nfunction D2TypedTextField({ control, type }: WidgetProps & { type?: 'email' | 'tel' | 'number' }) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type={type}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2EmailField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"email\" />;\n}\n\nexport function D2PhoneField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"tel\" />;\n}\n\nexport function D2NumberField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2IntegerField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2PercentageField({ control }: WidgetProps) {\n return (\n <D2TextField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n label: `${control.fieldConfig.label} (%)`,\n },\n }}\n />\n );\n}\n","import { CalendarInput, InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { computeAgeFromDob, resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nconst todayIso = (): string => new Date().toISOString().slice(0, 10);\n\ntype DateSelectPayload = {\n calendarDateString?: string;\n} | null;\n\nconst readDatePart = (value: string): string => {\n if (!value) return '';\n return value.includes('T') ? value.slice(0, 10) : value;\n};\n\nconst readTimePart = (value: string): string => {\n if (!value.includes('T')) return '';\n return value.slice(11, 16);\n};\n\nexport function D2DateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const dateValue = field.value as string;\n\n return (\n <CalendarInput\n name={field.name}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={dateValue || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n field.onChange(payload?.calendarDateString ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2TimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2DateTimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const datePart = readDatePart(value);\n const timePart = readTimePart(value);\n\n const commit = (nextDate: string, nextTime: string) => {\n if (!nextDate && !nextTime) {\n field.onChange('');\n return;\n }\n field.onChange(`${nextDate}T${nextTime || '00:00'}`);\n };\n\n return (\n <div>\n <CalendarInput\n name={`${field.name}-date`}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={datePart || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n commit(payload?.calendarDateString ?? '', timePart);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-time`}\n value={timePart}\n label={`${fieldConfig.label} (time)`}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n onChange={({ value: nextTime }) => {\n commit(datePart, nextTime ?? '');\n }}\n onBlur={field.onBlur}\n />\n </div>\n );\n}\n\nexport function D2AgeField({ control }: WidgetProps) {\n const age = computeAgeFromDob(control.field.value as string);\n const helpText = [control.fieldConfig.description, age ? `Age: ${age} years` : undefined]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <D2DateField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n description: helpText || control.fieldConfig.description,\n },\n }}\n />\n );\n}\n","import {\n CheckboxField,\n Field,\n MultiSelectField,\n MultiSelectOption,\n Radio,\n SingleSelectField,\n SingleSelectOption,\n} from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n joinMultiTextValue,\n parseMultiTextValue,\n resolveFieldValidation,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport { useMemo } from 'react';\n\nconst BOOLEAN_OPTIONS = [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n] as const;\n\nconst RADIO_RENDER_HINTS = new Set(['RADIO', 'VERTICAL_RADIOBUTTONS', 'HORIZONTAL_RADIOBUTTONS']);\n\nexport function D2BooleanField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <Field\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n warning={hasWarning}\n error={hasError}\n required={isMandatory}\n disabled={isDisabled}\n validationText={validationText}\n >\n <div\n style={{\n display: 'flex',\n gap: 16,\n }}\n >\n {BOOLEAN_OPTIONS.map((option) => (\n <Radio\n key={option.label}\n name={field.name}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n ))}\n </div>\n </Field>\n );\n}\n\nexport function D2TrueOnlyField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <CheckboxField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n checked={field.value === 'true'}\n onChange={({ checked }) => {\n field.onChange(checked ? 'true' : '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2SelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map(\n (option) => ({\n label: option.label,\n value: option.code,\n })\n );\n\n if (fieldConfig.renderTypeHint && RADIO_RENDER_HINTS.has(fieldConfig.renderTypeHint)) {\n return (\n <fieldset>\n <legend>{fieldConfig.label}</legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {options.map((option) => (\n <Radio\n key={option.value}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n />\n ))}\n {validationText ? <p>{validationText}</p> : null}\n </fieldset>\n );\n }\n\n return (\n <SingleSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={field.value as string}\n onChange={({ selected }) => {\n field.onChange(selected);\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <SingleSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </SingleSelectField>\n );\n}\n\nexport function D2MultiSelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = useMemo(\n () =>\n (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map((option) => ({\n label: option.label,\n value: option.code,\n })),\n [control.visibleOptions, fieldConfig.optionSet?.options]\n );\n const selected = parseMultiTextValue(field.value as string);\n\n return (\n <MultiSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={selected}\n onChange={({ selected: nextSelected }) => {\n field.onChange(joinMultiTextValue(nextSelected));\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <MultiSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </MultiSelectField>\n );\n}\n","import { Button, OrganisationUnitTree } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n resolveFieldValidation,\n useOrgUnitPickerContext,\n useOrganisationUnitsQuery,\n} from '@nnkogift/dhis2-form-utils-hooks';\n\n// fallow-ignore-next-line complexity\nexport function D2OrgUnitField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const pickerContext = useOrgUnitPickerContext();\n const { organisationUnits, roots, loading, error } = useOrganisationUnitsQuery(\n pickerContext?.roots\n );\n\n const value = field.value as string;\n const selectedUnit = organisationUnits.find((ou) => ou.id === value);\n const selectedLabel = selectedUnit?.displayName ?? value;\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {selectedLabel ? (\n <p>\n Selected: {selectedLabel}{' '}\n <Button\n small\n disabled={isDisabled}\n onClick={() => {\n field.onChange('');\n }}\n >\n Clear\n </Button>\n </p>\n ) : null}\n {roots.length > 0 ? (\n <OrganisationUnitTree\n roots={roots}\n singleSelection\n disableSelection={isDisabled}\n initiallyExpanded={roots.map((id) => `/${id}`)}\n onChange={({ id }) => {\n field.onChange(id);\n }}\n />\n ) : loading ? (\n <p>Loading organisation units…</p>\n ) : error ? (\n <p>Failed to load organisation units.</p>\n ) : null}\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { useConfig } from '@dhis2/app-runtime';\nimport { FileInputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation, useFileResourceUpload } from '@nnkogift/dhis2-form-utils-hooks';\nimport { useState } from 'react';\n\nfunction useFileFieldUpload(onChange: (id: string) => void) {\n const { upload, uploading, error } = useFileResourceUpload();\n const [uploadError, setUploadError] = useState<string | undefined>(undefined);\n\n const handleFiles = (files: FileList) => {\n const file = files.item(0);\n if (!file) return;\n // fallow-ignore-next-line code-duplication\n setUploadError(undefined);\n upload(file)\n .then((result) => {\n onChange(result.id);\n })\n .catch((uploadFailure: unknown) => {\n setUploadError(\n uploadFailure instanceof Error ? uploadFailure.message : 'Upload failed'\n );\n });\n };\n\n return { handleFiles, uploading, uploadError: uploadError ?? error?.message };\n}\n\n// fallow-ignore-next-line complexity\nexport function D2FileField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n\n return (\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={(field.value as string) ? 'Replace file' : 'Select file'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2ImageField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n const { baseUrl } = useConfig();\n const value = field.value as string;\n\n return (\n <div>\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n accept=\"image/*\"\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={value ? 'Replace image' : 'Select image'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n {value ? (\n <img\n src={`${baseUrl}/api/fileResources/${value}/data`}\n alt={fieldConfig.label}\n style={{ maxWidth: '200px', maxHeight: '200px', marginTop: '8px' }}\n />\n ) : null}\n </div>\n );\n}\n","export type CoordinateValue = { lng: number; lat: number };\n\nconst LNG_MIN = -180;\nconst LNG_MAX = 180;\nconst LAT_MIN = -90;\nconst LAT_MAX = 90;\n\n/**\n * Parses a DHIS2 `COORDINATE` value-type string, wire format `\"[lng,lat]\"`\n * (matches DHIS2 tracker API's coordinate/GeoJSON Point ordering).\n * Returns `null` for empty, malformed, or out-of-range input.\n */\nexport function parseCoordinateValue(value: string): CoordinateValue | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n if (!Array.isArray(parsed) || parsed.length !== 2) return null;\n const lng: unknown = parsed[0];\n const lat: unknown = parsed[1];\n if (typeof lng !== 'number' || typeof lat !== 'number') return null;\n if (!Number.isFinite(lng) || !Number.isFinite(lat)) return null;\n if (lng < LNG_MIN || lng > LNG_MAX || lat < LAT_MIN || lat > LAT_MAX) return null;\n\n return { lng, lat };\n}\n\n/** Serializes a longitude/latitude pair to the DHIS2 `\"[lng,lat]\"` wire format. */\nexport function joinCoordinateValue(lng: number, lat: number): string {\n return JSON.stringify([lng, lat]);\n}\n","import type { Geometry } from 'geojson';\n\n/**\n * DHIS2 `GEOJSON` value-type strings hold a single GeoJSON *geometry*\n * (Point/LineString/Polygon/...), not a full `Feature` or `FeatureCollection`.\n *\n * This assumption was NOT conclusively verified against DHIS2's own API docs\n * during planning — verify against a live DHIS2 instance (create a\n * GEOJSON-valueType data element, submit a value via Capture/Tracker Capture,\n * inspect the stored/returned JSON shape) before treating this as final. If\n * DHIS2 actually expects/returns a `Feature` wrapper, this module's\n * parse/stringify pair — and the `buildFieldSchema`/`buildTeaFieldSchema`\n * validators built on top of it — need a follow-up patch.\n */\n\nconst GEOMETRY_TYPES = new Set([\n 'Point',\n 'MultiPoint',\n 'LineString',\n 'MultiLineString',\n 'Polygon',\n 'MultiPolygon',\n 'GeometryCollection',\n]);\n\nfunction isGeometryShape(value: unknown): value is Geometry {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as { type?: unknown; coordinates?: unknown; geometries?: unknown };\n if (typeof candidate.type !== 'string' || !GEOMETRY_TYPES.has(candidate.type)) return false;\n if (candidate.type === 'GeometryCollection') return Array.isArray(candidate.geometries);\n return Array.isArray(candidate.coordinates);\n}\n\n/** Parses a `GEOJSON` value-type string into a GeoJSON geometry, or `null` if invalid/empty. */\nexport function parseGeojsonGeometry(value: string): Geometry | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n return isGeometryShape(parsed) ? parsed : null;\n}\n\n/** Serializes a GeoJSON geometry to the DHIS2 `GEOJSON` value-type wire format. */\nexport function stringifyGeojsonGeometry(geometry: Geometry): string {\n return JSON.stringify(geometry);\n}\n\n/** Returns `true` when `value` is a valid, non-empty GeoJSON geometry string. */\nexport function isValidGeojsonGeometry(value: string): boolean {\n return parseGeojsonGeometry(value) !== null;\n}\n","import type { StyleSpecification } from 'maplibre-gl';\n\n/**\n * Free, no-API-key OpenStreetMap raster basemap used as the default `mapStyle`\n * for `CoordinateMapPicker`/`GeoJsonMapEditor`.\n *\n * OSM's tile usage policy (https://operations.osmfoundation.org/policies/tiles/)\n * disallows heavy automated/production traffic against `tile.openstreetmap.org`\n * without self-hosting or a paid provider. Swap this out via the `mapStyle` prop\n * (a full MapLibre `StyleSpecification` or a style URL) before deploying a\n * production app at scale — e.g. MapTiler, Protomaps, or a DHIS2-hosted tile\n * server. This default exists so the widgets work out of the box in\n * development, tests, and Storybook.\n */\nexport const defaultMapStyle: StyleSpecification = {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '© OpenStreetMap contributors',\n },\n },\n layers: [\n {\n id: 'osm',\n type: 'raster',\n source: 'osm',\n },\n ],\n};\n","import { Map as MapLibreMap, NavigationControl, type StyleSpecification } from 'maplibre-gl';\nimport { useEffect, useRef, useState, type RefObject } from 'react';\n\nexport type UseMapLibreMapOptions = {\n style: StyleSpecification | string;\n};\n\nexport type UseMapLibreMapResult = {\n containerRef: RefObject<HTMLDivElement>;\n map: MapLibreMap | null;\n};\n\n/**\n * Creates a MapLibre GL map instance on a ref'd container and tears it down\n * on unmount. Shared by `CoordinateMapPicker` and `GeoJsonMapEditor`.\n *\n * `map` stays `null` until the map's `'load'` event fires — consumers that\n * add sources/layers (e.g. terra-draw's GeoJSON source) must wait for style\n * load, or MapLibre throws \"Style is not done loading\".\n *\n * The `style` used is the one active when the map is first created — changing\n * `style` on a later render does not re-initialize the map (out of scope for v1).\n */\nexport function useMapLibreMap({ style }: UseMapLibreMapOptions): UseMapLibreMapResult {\n const containerRef = useRef<HTMLDivElement>(null);\n const [map, setMap] = useState<MapLibreMap | null>(null);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n const instance = new MapLibreMap({\n container: containerRef.current,\n style,\n center: [0, 0],\n zoom: 1,\n });\n instance.addControl(new NavigationControl(), 'top-right');\n instance.once('load', () => {\n setMap(instance);\n });\n\n return () => {\n instance.remove();\n setMap(null);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { containerRef, map };\n}\n","import { Marker, type MapMouseEvent } from 'maplibre-gl';\nimport { useEffect, useRef } from 'react';\nimport { joinCoordinateValue, parseCoordinateValue } from './coordinateValue';\nimport { defaultMapStyle } from './defaultMapStyle';\nimport type { MapPickerProps } from './types';\nimport { useMapLibreMap } from './useMapLibreMap';\n\nexport type CoordinateMapPickerProps = MapPickerProps;\n\n/**\n * Single draggable/click-to-place marker over a MapLibre map. Renders only the\n * map canvas — the accessible numeric lng/lat inputs are adapter-owned (each\n * UI kit composes this alongside its own number inputs bound to the same\n * `value`/`onChange`).\n */\nexport function CoordinateMapPicker({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n}: CoordinateMapPickerProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const markerRef = useRef<Marker | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const ensureMarker = (lng: number, lat: number) => {\n if (markerRef.current) {\n markerRef.current.setLngLat([lng, lat]);\n return markerRef.current;\n }\n const marker = new Marker({ draggable: !disabled }).setLngLat([lng, lat]).addTo(map);\n marker.on('dragend', () => {\n const lngLat = marker.getLngLat();\n onChangeRef.current(joinCoordinateValue(lngLat.lng, lngLat.lat));\n });\n markerRef.current = marker;\n return marker;\n };\n\n const handleClick = (event: MapMouseEvent) => {\n if (disabled) return;\n ensureMarker(event.lngLat.lng, event.lngLat.lat);\n onChangeRef.current(joinCoordinateValue(event.lngLat.lng, event.lngLat.lat));\n };\n\n map.on('click', handleClick);\n\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n ensureMarker(parsed.lng, parsed.lat);\n map.setCenter([parsed.lng, parsed.lat]);\n }\n\n return () => {\n map.off('click', handleClick);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, disabled]);\n\n useEffect(() => {\n if (!markerRef.current) return;\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n markerRef.current.setLngLat([parsed.lng, parsed.lat]);\n }\n }, [value]);\n\n useEffect(() => {\n markerRef.current?.setDraggable(!disabled);\n }, [disabled]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', height: '300px' }}\n aria-hidden=\"true\"\n />\n );\n}\n","import { useEffect, useRef } from 'react';\nimport {\n TerraDraw,\n TerraDrawLineStringMode,\n TerraDrawPointMode,\n TerraDrawPolygonMode,\n type GeoJSONStoreGeometries,\n} from 'terra-draw';\nimport { TerraDrawMapLibreGLAdapter } from 'terra-draw-maplibre-gl-adapter';\nimport { defaultMapStyle } from './defaultMapStyle';\nimport { parseGeojsonGeometry, stringifyGeojsonGeometry } from './geojsonValue';\nimport type { MapPickerProps } from './types';\nimport { useMapLibreMap } from './useMapLibreMap';\n\nexport type GeoJsonDrawMode = 'point' | 'linestring' | 'polygon';\n\nexport type GeoJsonMapEditorProps = MapPickerProps & {\n /** Draw modes offered to the user. Defaults to all three. */\n modes?: GeoJsonDrawMode[];\n};\n\nconst DEFAULT_MODES: GeoJsonDrawMode[] = ['point', 'linestring', 'polygon'];\n\nfunction createDrawMode(mode: GeoJsonDrawMode) {\n switch (mode) {\n case 'point':\n return new TerraDrawPointMode();\n case 'linestring':\n return new TerraDrawLineStringMode();\n case 'polygon':\n return new TerraDrawPolygonMode();\n }\n}\n\n/**\n * MapLibre + terra-draw point/line/polygon editor for a single GeoJSON\n * geometry (DHIS2 `GEOJSON` DE/TEA value is one geometry, not a\n * FeatureCollection — starting a new draw clears any existing feature).\n * Renders only the map + draw-mode controls — the raw-JSON textarea fallback\n * is adapter-owned.\n */\nexport function GeoJsonMapEditor({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n modes = DEFAULT_MODES,\n}: GeoJsonMapEditorProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const drawRef = useRef<TerraDraw | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const draw = new TerraDraw({\n adapter: new TerraDrawMapLibreGLAdapter({ map }),\n modes: modes.map(createDrawMode),\n });\n drawRef.current = draw;\n draw.start();\n\n const initial = parseGeojsonGeometry(value);\n if (initial) {\n draw.addFeatures([\n { type: 'Feature', geometry: initial as GeoJSONStoreGeometries, properties: {} },\n ]);\n }\n\n const handleFinish = (id: Parameters<typeof draw.getSnapshotFeature>[0]) => {\n const feature = draw.getSnapshotFeature(id);\n if (feature) {\n onChangeRef.current(stringifyGeojsonGeometry(feature.geometry));\n }\n };\n draw.on('finish', handleFinish);\n\n return () => {\n draw.off('finish', handleFinish);\n try {\n // terra-draw's adapter can throw during its own teardown if the underlying\n // MapLibre map is torn down first (e.g. rapid unmount) — a widget unmounting\n // must never crash the host app, so this is defensive, not expected to fire.\n draw.stop();\n } catch {\n // Intentionally ignored — see comment above.\n }\n drawRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map]);\n\n const startDrawing = (mode: GeoJsonDrawMode) => {\n const draw = drawRef.current;\n if (!draw || disabled) return;\n draw.clear();\n draw.setMode(mode);\n };\n\n return (\n <div className={className}>\n <div ref={containerRef} style={{ width: '100%', height: '300px' }} aria-hidden=\"true\" />\n {!disabled ? (\n <div role=\"group\" aria-label=\"Draw geometry\">\n {modes.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => {\n startDrawing(mode);\n }}\n >\n Draw {mode}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","// fallow-ignore-file code-duplication\nimport { InputField, TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n CoordinateMapPicker,\n GeoJsonMapEditor,\n joinCoordinateValue,\n parseCoordinateValue,\n parseGeojsonGeometry,\n stringifyGeojsonGeometry,\n} from '@nnkogift/dhis2-form-utils-map';\nimport 'maplibre-gl/dist/maplibre-gl.css';\nimport { useEffect, useState } from 'react';\n\n// fallow-ignore-next-line complexity\nexport function D2CoordinateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n\n // Local text buffers, not derived directly from field.value on every render — a controlled\n // number input driven straight off `parseCoordinateValue(value)` rejects intermediate\n // keystrokes (e.g. typing \"-\" alone parses to NaN and gets silently dropped, so a user can\n // never type a negative number). These stay in sync with external value changes (map clicks,\n // RHF reset) via the effect below, but aren't clobbered by the widget's own in-progress typing.\n const [lngText, setLngText] = useState(() => parseCoordinateValue(value)?.lng.toString() ?? '');\n const [latText, setLatText] = useState(() => parseCoordinateValue(value)?.lat.toString() ?? '');\n\n useEffect(() => {\n const parsed = parseCoordinateValue(value);\n setLngText(parsed ? parsed.lng.toString() : '');\n setLatText(parsed ? parsed.lat.toString() : '');\n }, [value]);\n\n const commit = (lngRaw: string, latRaw: string) => {\n const lng = parseFloat(lngRaw);\n const lat = parseFloat(latRaw);\n if (Number.isFinite(lng) && Number.isFinite(lat)) {\n field.onChange(joinCoordinateValue(lng, lat));\n }\n };\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <CoordinateMapPicker value={value} onChange={field.onChange} disabled={isDisabled} />\n <InputField\n name={`${field.name}-lng`}\n type=\"number\"\n label=\"Longitude\"\n value={lngText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLngText(text);\n commit(text, latText);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-lat`}\n type=\"number\"\n label=\"Latitude\"\n value={latText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLatText(text);\n commit(lngText, text);\n }}\n onBlur={field.onBlur}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2GeoJsonField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const [textValue, setTextValue] = useState(value);\n const [textError, setTextError] = useState<string | undefined>(undefined);\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <GeoJsonMapEditor\n value={value}\n onChange={(next) => {\n field.onChange(next);\n const geometry = parseGeojsonGeometry(next);\n setTextValue(geometry ? JSON.stringify(geometry, null, 2) : next);\n setTextError(undefined);\n }}\n disabled={isDisabled}\n />\n <TextAreaField\n name={`${field.name}-geometry`}\n label=\"Geometry (JSON)\"\n value={textValue}\n disabled={isDisabled}\n warning={Boolean(textError)}\n validationText={textError}\n onChange={({ value: next }) => {\n setTextValue(next ?? '');\n }}\n onBlur={() => {\n if (!textValue) {\n field.onChange('');\n setTextError(undefined);\n return;\n }\n const geometry = parseGeojsonGeometry(textValue);\n if (geometry) {\n field.onChange(stringifyGeojsonGeometry(geometry));\n setTextError(undefined);\n } else {\n setTextError('Not a valid GeoJSON geometry');\n }\n field.onBlur();\n }}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2UnsupportedField({ control }: WidgetProps) {\n const { fieldConfig, field, widgetKind, isMandatory } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={`Widget not yet implemented: ${widgetKind}`}\n required={isMandatory}\n disabled\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","// fallow-ignore-file code-duplication\nimport {\n type FieldControlInput,\n useFieldControl,\n type WidgetProps,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport type { WidgetKind } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ComponentType } from 'react';\nimport {\n D2AgeField,\n D2BooleanField,\n D2CoordinateField,\n D2DateField,\n D2DateTimeField,\n D2EmailField,\n D2FileField,\n D2GeoJsonField,\n D2ImageField,\n D2IntegerField,\n D2LongTextField,\n D2MultiSelectField,\n D2NumberField,\n D2OrgUnitField,\n D2PercentageField,\n D2PhoneField,\n D2SelectField,\n D2TextField,\n D2TimeField,\n D2TrueOnlyField,\n D2UnsupportedField,\n} from './widgets';\n\nexport type D2FieldProps = {\n field: FieldControlInput;\n};\n\nexport type D2FieldWidgetProps = WidgetProps;\n\nconst WIDGET_BY_KIND: Record<WidgetKind, ComponentType<WidgetProps>> = {\n text: D2TextField,\n longText: D2LongTextField,\n email: D2EmailField,\n phone: D2PhoneField,\n number: D2NumberField,\n integer: D2IntegerField,\n percentage: D2PercentageField,\n boolean: D2BooleanField,\n trueOnly: D2TrueOnlyField,\n date: D2DateField,\n time: D2TimeField,\n age: D2AgeField,\n select: D2SelectField,\n multiSelect: D2MultiSelectField,\n datetime: D2DateTimeField,\n coordinate: D2CoordinateField,\n geojson: D2GeoJsonField,\n orgUnit: D2OrgUnitField,\n file: D2FileField,\n image: D2ImageField,\n unsupported: D2UnsupportedField,\n};\n\n/** Dispatches an already-resolved `FieldControlReturn` to its widget component, without re-deriving field control state. Reused by consumers that build their own chrome (labels, badges, ghost placeholders) around a field. */\nexport function D2FieldWidget({ control }: D2FieldWidgetProps) {\n const Widget = WIDGET_BY_KIND[control.widgetKind];\n return <Widget control={control} />;\n}\n\nexport function D2Field({ field }: D2FieldProps) {\n const fieldControl = useFieldControl({ ...field });\n\n if (fieldControl.isHidden) return null;\n\n return <D2FieldWidget control={fieldControl} />;\n}\n","import { useSectionState } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ReactNode } from 'react';\n\nexport type FormSectionProps = {\n sectionId: string;\n children: ReactNode;\n};\n\nexport function FormSection({ sectionId, children }: FormSectionProps) {\n const state = useSectionState(sectionId);\n\n if (state.hidden) {\n return null;\n }\n\n return <>{children}</>;\n}\n","import { NoticeBox } from '@dhis2/ui';\nimport { useFormFeedback } from '@nnkogift/dhis2-form-utils-hooks';\n\ntype FeedbackItem = ReturnType<typeof useFormFeedback>[string];\n\nfunction FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[] }) {\n if (!items.length) {\n return null;\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacers-dp16)' }}>\n <h3 style={{ margin: '0 0 var(--spacers-dp8)' }}>{title}</h3>\n {items.map((item) => (\n <NoticeBox key={`${item.location}:${item.content}`} title={item.content}>\n {item.value ? (\n <>\n <strong>{item.content}</strong>: {item.value}\n </>\n ) : (\n item.content\n )}\n </NoticeBox>\n ))}\n </div>\n );\n}\n\nexport function FormFeedback() {\n const feedback = useFormFeedback();\n const items = Object.values(feedback);\n const feedbackItems = items.filter((item) => item.location === 'feedback');\n const indicatorItems = items.filter((item) => item.location === 'indicators');\n\n if (!feedbackItems.length && !indicatorItems.length) {\n return null;\n }\n\n return (\n <div>\n <FeedbackPanel title=\"Feedback\" items={feedbackItems} />\n <FeedbackPanel title=\"Program indicators\" items={indicatorItems} />\n </div>\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nnkogift/dhis2-form-utils-dhis2-ui",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.2",
|
|
4
4
|
"description": "DHIS2 UI field components and forms for dhis2-form-utils",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -34,15 +34,20 @@
|
|
|
34
34
|
"registry": "https://registry.npmjs.org/"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"
|
|
37
|
+
"maplibre-gl": "^6.1.0",
|
|
38
|
+
"terra-draw": "^1.32.2",
|
|
39
|
+
"terra-draw-maplibre-gl-adapter": "^1.4.1",
|
|
40
|
+
"@nnkogift/dhis2-form-utils-hooks": "0.1.0-alpha.2"
|
|
38
41
|
},
|
|
39
42
|
"peerDependencies": {
|
|
43
|
+
"@dhis2/app-runtime": ">=3.0.0",
|
|
40
44
|
"@dhis2/ui": ">=9.0.0",
|
|
41
45
|
"react": ">=18.0.0",
|
|
42
46
|
"react-dom": ">=18.0.0",
|
|
43
47
|
"react-hook-form": ">=7.0.0"
|
|
44
48
|
},
|
|
45
49
|
"devDependencies": {
|
|
50
|
+
"@dhis2/app-runtime": "^3.17.0",
|
|
46
51
|
"@dhis2/ui": "^10.15.1",
|
|
47
52
|
"@types/react": "^18.3.29",
|
|
48
53
|
"@types/react-dom": "^18.3.7",
|
|
@@ -51,8 +56,9 @@
|
|
|
51
56
|
"react-hook-form": "^7.76.0",
|
|
52
57
|
"tsup": "^8.5.1",
|
|
53
58
|
"typescript": "^5.9.3",
|
|
54
|
-
"vitest": "^4.1.
|
|
55
|
-
"@nnkogift/dhis2-form-utils-config": "0.0.0"
|
|
59
|
+
"vitest": "^4.1.10",
|
|
60
|
+
"@nnkogift/dhis2-form-utils-config": "0.0.0",
|
|
61
|
+
"@nnkogift/dhis2-form-utils-map": "0.0.0"
|
|
56
62
|
},
|
|
57
63
|
"engines": {
|
|
58
64
|
"node": ">=18"
|