create-nextjs-cms 0.9.6 → 0.9.7
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/LICENSE +21 -21
- package/README.md +71 -71
- package/dist/helpers/check-directory.d.ts +1 -0
- package/dist/helpers/check-directory.d.ts.map +1 -1
- package/dist/helpers/check-directory.js +98 -23
- package/dist/helpers/utils.js +16 -16
- package/dist/index.js +13 -8
- package/dist/lib/create-project.js +1 -1
- package/dist/lib/section-creators.js +166 -166
- package/package.json +1 -1
- package/templates/default/.eslintrc.json +5 -5
- package/templates/default/.prettierignore +7 -7
- package/templates/default/.prettierrc.json +27 -27
- package/templates/default/CHANGELOG.md +140 -140
- package/templates/default/_gitignore +57 -57
- package/templates/default/app/(auth)/auth/login/LoginPage.tsx +192 -192
- package/templates/default/app/(auth)/auth/login/page.tsx +11 -11
- package/templates/default/app/(auth)/auth-language-provider.tsx +34 -34
- package/templates/default/app/(auth)/layout.tsx +81 -81
- package/templates/default/app/(rootLayout)/(plugins)/[...slug]/page.tsx +40 -40
- package/templates/default/app/(rootLayout)/(plugins)/[...slug]/plugin-server-registry.ts +16 -16
- package/templates/default/app/(rootLayout)/admins/page.tsx +10 -10
- package/templates/default/app/(rootLayout)/browse/[section]/[page]/page.tsx +22 -22
- package/templates/default/app/(rootLayout)/categorized/[section]/page.tsx +15 -15
- package/templates/default/app/(rootLayout)/dashboard/page.tsx +63 -63
- package/templates/default/app/(rootLayout)/edit/[section]/[itemId]/page.tsx +20 -20
- package/templates/default/app/(rootLayout)/layout.tsx +81 -81
- package/templates/default/app/(rootLayout)/loading.tsx +10 -10
- package/templates/default/app/(rootLayout)/log/page.tsx +7 -7
- package/templates/default/app/(rootLayout)/new/[section]/page.tsx +15 -15
- package/templates/default/app/(rootLayout)/section/[section]/page.tsx +19 -19
- package/templates/default/app/(rootLayout)/settings/page.tsx +13 -13
- package/templates/default/app/_trpc/client.ts +3 -3
- package/templates/default/app/api/auth/csrf/route.ts +25 -25
- package/templates/default/app/api/auth/refresh/route.ts +10 -10
- package/templates/default/app/api/auth/route.ts +49 -49
- package/templates/default/app/api/auth/session/route.ts +20 -20
- package/templates/default/app/api/document/route.ts +165 -165
- package/templates/default/app/api/editor/photo/route.ts +49 -49
- package/templates/default/app/api/photo/route.ts +27 -27
- package/templates/default/app/api/submit/section/item/[slug]/route.ts +95 -95
- package/templates/default/app/api/submit/section/item/route.ts +56 -56
- package/templates/default/app/api/submit/section/simple/route.ts +86 -86
- package/templates/default/app/api/trpc/[trpc]/route.ts +33 -33
- package/templates/default/app/api/video/route.ts +174 -174
- package/templates/default/app/globals.css +228 -228
- package/templates/default/app/providers.tsx +152 -152
- package/templates/default/cms.config.ts +57 -58
- package/templates/default/components/AdminCard.tsx +166 -166
- package/templates/default/components/AdminEditPage.tsx +124 -124
- package/templates/default/components/AdminPrivilegeCard.tsx +185 -185
- package/templates/default/components/AdminsPage.tsx +43 -43
- package/templates/default/components/AnalyticsPage.tsx +144 -144
- package/templates/default/components/BarChartBox.tsx +42 -42
- package/templates/default/components/BrowsePage.tsx +106 -106
- package/templates/default/components/CategorizedSectionPage.tsx +31 -31
- package/templates/default/components/CategoryDeleteConfirmPage.tsx +130 -130
- package/templates/default/components/CategorySectionSelectInput.tsx +140 -140
- package/templates/default/components/ConditionalFields.tsx +49 -49
- package/templates/default/components/ContainerBox.tsx +24 -24
- package/templates/default/components/DashboardPageAlt.tsx +45 -45
- package/templates/default/components/DefaultNavItems.tsx +3 -3
- package/templates/default/components/Dropzone.tsx +154 -154
- package/templates/default/components/ErrorComponent.tsx +16 -16
- package/templates/default/components/GalleryPhoto.tsx +93 -93
- package/templates/default/components/InfoCard.tsx +93 -93
- package/templates/default/components/ItemEditPage.tsx +294 -294
- package/templates/default/components/Layout.tsx +84 -84
- package/templates/default/components/LoadingSpinners.tsx +67 -67
- package/templates/default/components/LocaleSwitcher.tsx +89 -89
- package/templates/default/components/LogPage.tsx +107 -107
- package/templates/default/components/Modal.tsx +166 -166
- package/templates/default/components/Navbar.tsx +258 -258
- package/templates/default/components/NewAdminForm.tsx +173 -173
- package/templates/default/components/NewPage.tsx +206 -206
- package/templates/default/components/NewVariantComponent.tsx +229 -229
- package/templates/default/components/PhotoGallery.tsx +35 -35
- package/templates/default/components/PieChartBox.tsx +101 -101
- package/templates/default/components/ProgressBar.tsx +48 -48
- package/templates/default/components/ProtectedDocument.tsx +44 -44
- package/templates/default/components/ProtectedImage.tsx +143 -143
- package/templates/default/components/ProtectedVideo.tsx +76 -76
- package/templates/default/components/SectionIcon.tsx +8 -8
- package/templates/default/components/SectionItemCard.tsx +144 -144
- package/templates/default/components/SectionItemStatusBadge.tsx +17 -17
- package/templates/default/components/SectionPage.tsx +205 -205
- package/templates/default/components/SelectBox.tsx +98 -98
- package/templates/default/components/SelectInputButtons.tsx +125 -125
- package/templates/default/components/SettingsPage.tsx +232 -232
- package/templates/default/components/Sidebar.tsx +204 -204
- package/templates/default/components/SidebarDropdownItem.tsx +83 -83
- package/templates/default/components/SidebarItem.tsx +24 -24
- package/templates/default/components/ThemeProvider.tsx +8 -8
- package/templates/default/components/TooltipComponent.tsx +27 -27
- package/templates/default/components/VariantCard.tsx +124 -124
- package/templates/default/components/VariantEditPage.tsx +230 -230
- package/templates/default/components/analytics/BounceRate.tsx +70 -70
- package/templates/default/components/analytics/LivePageViews.tsx +55 -55
- package/templates/default/components/analytics/LiveUsersCount.tsx +33 -33
- package/templates/default/components/analytics/MonthlyPageViews.tsx +42 -42
- package/templates/default/components/analytics/TopCountries.tsx +52 -52
- package/templates/default/components/analytics/TopDevices.tsx +46 -46
- package/templates/default/components/analytics/TopMediums.tsx +58 -58
- package/templates/default/components/analytics/TopSources.tsx +45 -45
- package/templates/default/components/analytics/TotalPageViews.tsx +41 -41
- package/templates/default/components/analytics/TotalSessions.tsx +41 -41
- package/templates/default/components/analytics/TotalUniqueUsers.tsx +41 -41
- package/templates/default/components/custom/RightHomeRoomVariantCard.tsx +138 -138
- package/templates/default/components/dndKit/Draggable.tsx +21 -21
- package/templates/default/components/dndKit/Droppable.tsx +20 -20
- package/templates/default/components/dndKit/SortableItem.tsx +18 -18
- package/templates/default/components/form/Form.tsx +370 -370
- package/templates/default/components/form/FormInputElement.tsx +70 -70
- package/templates/default/components/form/FormInputs.tsx +136 -136
- package/templates/default/components/form/helpers/_section-hot-reload.js +1 -1
- package/templates/default/components/form/helpers/util.ts +17 -17
- package/templates/default/components/form/inputs/CheckboxFormInput.tsx +46 -46
- package/templates/default/components/form/inputs/ColorFormInput.tsx +44 -44
- package/templates/default/components/form/inputs/DateFormInput.tsx +167 -110
- package/templates/default/components/form/inputs/DateRangeFormInput.tsx +23 -1
- package/templates/default/components/form/inputs/DocumentFormInput.tsx +222 -222
- package/templates/default/components/form/inputs/MapFormInput.tsx +140 -140
- package/templates/default/components/form/inputs/MultipleSelectFormInput.tsx +85 -85
- package/templates/default/components/form/inputs/NumberFormInput.tsx +43 -43
- package/templates/default/components/form/inputs/PasswordFormInput.tsx +47 -47
- package/templates/default/components/form/inputs/PhotoFormInput.tsx +275 -275
- package/templates/default/components/form/inputs/RichTextFormInput.tsx +138 -138
- package/templates/default/components/form/inputs/SelectFormInput.tsx +175 -175
- package/templates/default/components/form/inputs/SlugFormInput.tsx +131 -131
- package/templates/default/components/form/inputs/TagsFormInput.tsx +265 -265
- package/templates/default/components/form/inputs/TextFormInput.tsx +51 -51
- package/templates/default/components/form/inputs/TextareaFormInput.tsx +50 -50
- package/templates/default/components/form/inputs/VideoFormInput.tsx +118 -118
- package/templates/default/components/multi-select.tsx +1146 -1146
- package/templates/default/components/pagination/Pagination.tsx +36 -36
- package/templates/default/components/pagination/PaginationButtons.tsx +147 -147
- package/templates/default/components/theme-toggle.tsx +39 -39
- package/templates/default/components/ui/accordion.tsx +53 -53
- package/templates/default/components/ui/alert-dialog.tsx +157 -157
- package/templates/default/components/ui/alert.tsx +47 -47
- package/templates/default/components/ui/badge.tsx +38 -38
- package/templates/default/components/ui/button.tsx +62 -62
- package/templates/default/components/ui/calendar.tsx +166 -166
- package/templates/default/components/ui/card.tsx +43 -43
- package/templates/default/components/ui/checkbox.tsx +29 -29
- package/templates/default/components/ui/command.tsx +137 -137
- package/templates/default/components/ui/custom-alert-dialog.tsx +113 -113
- package/templates/default/components/ui/custom-dialog.tsx +123 -123
- package/templates/default/components/ui/dialog.tsx +123 -123
- package/templates/default/components/ui/direction.tsx +22 -22
- package/templates/default/components/ui/dropdown-menu.tsx +182 -182
- package/templates/default/components/ui/input-group.tsx +54 -54
- package/templates/default/components/ui/input.tsx +22 -22
- package/templates/default/components/ui/label.tsx +19 -19
- package/templates/default/components/ui/popover.tsx +42 -42
- package/templates/default/components/ui/progress.tsx +31 -31
- package/templates/default/components/ui/scroll-area.tsx +42 -42
- package/templates/default/components/ui/select.tsx +165 -165
- package/templates/default/components/ui/separator.tsx +28 -28
- package/templates/default/components/ui/sheet.tsx +103 -103
- package/templates/default/components/ui/spinner.tsx +16 -16
- package/templates/default/components/ui/switch.tsx +29 -29
- package/templates/default/components/ui/table.tsx +83 -83
- package/templates/default/components/ui/tabs.tsx +55 -55
- package/templates/default/components/ui/toast.tsx +113 -113
- package/templates/default/components/ui/toaster.tsx +35 -35
- package/templates/default/components/ui/tooltip.tsx +30 -30
- package/templates/default/components/ui/use-toast.ts +188 -188
- package/templates/default/components.json +21 -21
- package/templates/default/context/ModalProvider.tsx +53 -53
- package/templates/default/drizzle.config.ts +4 -4
- package/templates/default/dynamic-schemas/schema.ts +475 -0
- package/templates/default/env/env.js +130 -130
- package/templates/default/envConfig.ts +4 -4
- package/templates/default/hooks/useModal.ts +8 -8
- package/templates/default/lib/apiHelpers.ts +92 -92
- package/templates/default/lib/postinstall.js +14 -14
- package/templates/default/lib/utils.ts +6 -6
- package/templates/default/next-env.d.ts +6 -6
- package/templates/default/next.config.ts +23 -23
- package/templates/default/package.json +1 -1
- package/templates/default/postcss.config.mjs +6 -6
- package/templates/default/proxy.ts +32 -32
- package/templates/default/tsconfig.json +48 -48
|
@@ -1,131 +1,131 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import React, { useCallback, useEffect, useRef } from 'react'
|
|
4
|
-
import FormInputElement from '@/components/form/FormInputElement'
|
|
5
|
-
import type { SlugFieldClientConfig } from 'nextjs-cms/core/fields'
|
|
6
|
-
import { useFormContext, useController, useWatch } from 'react-hook-form'
|
|
7
|
-
import { InputGroup, InputGroupInput, InputGroupAddon } from '@/components/ui/input-group'
|
|
8
|
-
import { Link2 } from 'lucide-react'
|
|
9
|
-
import { useI18n } from 'nextjs-cms/translations/client'
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Convert a string to a URL-friendly slug (for real-time input).
|
|
13
|
-
* - Converts to lowercase
|
|
14
|
-
* - Replaces spaces with hyphens
|
|
15
|
-
* - Removes special characters (keeps letters from any language, numbers, and hyphens)
|
|
16
|
-
* - Collapses multiple consecutive hyphens into one
|
|
17
|
-
* - Keeps trailing hyphen (user might still be typing)
|
|
18
|
-
*/
|
|
19
|
-
function toSlugLive(value: string): string {
|
|
20
|
-
return value
|
|
21
|
-
.toLowerCase()
|
|
22
|
-
.replace(/\s+/g, '-') // Replace spaces with hyphens
|
|
23
|
-
.replace(/[^\p{L}\p{N}-]/gu, '') // Remove special characters (keep Unicode letters/numbers)
|
|
24
|
-
.replace(/-+/g, '-') // Collapse multiple hyphens
|
|
25
|
-
.replace(/^-/, '') // Remove leading hyphen only
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Normalize a slug (for blur/final value).
|
|
30
|
-
* Same as toSlugLive but also trims and removes trailing hyphens.
|
|
31
|
-
*/
|
|
32
|
-
function toSlugFinal(value: string): string {
|
|
33
|
-
return toSlugLive(value.trim()).replace(/-$/, '') // Remove trailing hyphen
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export default function SlugFormInput({
|
|
37
|
-
input,
|
|
38
|
-
direction,
|
|
39
|
-
disabled = false,
|
|
40
|
-
}: {
|
|
41
|
-
input: SlugFieldClientConfig
|
|
42
|
-
direction?: 'row' | 'col'
|
|
43
|
-
disabled?: boolean
|
|
44
|
-
}) {
|
|
45
|
-
const t = useI18n()
|
|
46
|
-
const { control } = useFormContext()
|
|
47
|
-
const {
|
|
48
|
-
field,
|
|
49
|
-
fieldState: { error },
|
|
50
|
-
} = useController({
|
|
51
|
-
name: input.name,
|
|
52
|
-
control,
|
|
53
|
-
defaultValue: input.value ?? '',
|
|
54
|
-
disabled: disabled,
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
// Watch the source field value
|
|
58
|
-
const sourceFieldValue = useWatch({
|
|
59
|
-
control,
|
|
60
|
-
name: input.forFieldName,
|
|
61
|
-
defaultValue: '',
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
// Track previous source value to only update when it actually changes
|
|
65
|
-
const previousSourceValueRef = useRef<string>(sourceFieldValue ?? '')
|
|
66
|
-
|
|
67
|
-
// Auto-generate slug from source field when it changes
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
const currentSourceValue = sourceFieldValue ?? ''
|
|
70
|
-
|
|
71
|
-
// Only update if the source field value actually changed
|
|
72
|
-
if (currentSourceValue !== previousSourceValueRef.current) {
|
|
73
|
-
previousSourceValueRef.current = currentSourceValue
|
|
74
|
-
|
|
75
|
-
if (currentSourceValue) {
|
|
76
|
-
const newSlug = toSlugFinal(currentSourceValue)
|
|
77
|
-
field.onChange(newSlug)
|
|
78
|
-
} else {
|
|
79
|
-
field.onChange('')
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}, [sourceFieldValue, field])
|
|
83
|
-
|
|
84
|
-
// Handle manual changes to the slug field
|
|
85
|
-
const handleChange = useCallback(
|
|
86
|
-
(e: React.ChangeEvent<HTMLInputElement>) => {
|
|
87
|
-
const newValue = e.target.value
|
|
88
|
-
// Apply slug normalization in real-time
|
|
89
|
-
field.onChange(toSlugLive(newValue))
|
|
90
|
-
},
|
|
91
|
-
[field],
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
// Handle blur - finalize the slug value (remove trailing hyphens)
|
|
95
|
-
const handleBlur = useCallback(() => {
|
|
96
|
-
field.onBlur()
|
|
97
|
-
if (field.value) {
|
|
98
|
-
const finalSlug = toSlugFinal(field.value)
|
|
99
|
-
if (finalSlug !== field.value) {
|
|
100
|
-
field.onChange(finalSlug)
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}, [field])
|
|
104
|
-
|
|
105
|
-
return (
|
|
106
|
-
<FormInputElement
|
|
107
|
-
validationError={error}
|
|
108
|
-
value={input.value}
|
|
109
|
-
readonly={input.readonly}
|
|
110
|
-
label={input.label}
|
|
111
|
-
required={input.required}
|
|
112
|
-
>
|
|
113
|
-
<InputGroup className='bg-input'>
|
|
114
|
-
<InputGroupAddon align='inline-start' title={t('autoGeneratedFromLinkedField') as string}>
|
|
115
|
-
<Link2 className='h-4 w-4' />
|
|
116
|
-
</InputGroupAddon>
|
|
117
|
-
<InputGroupInput
|
|
118
|
-
placeholder={input.placeholder ? input.placeholder : input.label}
|
|
119
|
-
type='text'
|
|
120
|
-
readOnly={disabled}
|
|
121
|
-
disabled={field.disabled}
|
|
122
|
-
name={field.name}
|
|
123
|
-
onChange={handleChange}
|
|
124
|
-
onBlur={handleBlur}
|
|
125
|
-
value={field.value ?? ''}
|
|
126
|
-
ref={field.ref}
|
|
127
|
-
/>
|
|
128
|
-
</InputGroup>
|
|
129
|
-
</FormInputElement>
|
|
130
|
-
)
|
|
131
|
-
}
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import React, { useCallback, useEffect, useRef } from 'react'
|
|
4
|
+
import FormInputElement from '@/components/form/FormInputElement'
|
|
5
|
+
import type { SlugFieldClientConfig } from 'nextjs-cms/core/fields'
|
|
6
|
+
import { useFormContext, useController, useWatch } from 'react-hook-form'
|
|
7
|
+
import { InputGroup, InputGroupInput, InputGroupAddon } from '@/components/ui/input-group'
|
|
8
|
+
import { Link2 } from 'lucide-react'
|
|
9
|
+
import { useI18n } from 'nextjs-cms/translations/client'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Convert a string to a URL-friendly slug (for real-time input).
|
|
13
|
+
* - Converts to lowercase
|
|
14
|
+
* - Replaces spaces with hyphens
|
|
15
|
+
* - Removes special characters (keeps letters from any language, numbers, and hyphens)
|
|
16
|
+
* - Collapses multiple consecutive hyphens into one
|
|
17
|
+
* - Keeps trailing hyphen (user might still be typing)
|
|
18
|
+
*/
|
|
19
|
+
function toSlugLive(value: string): string {
|
|
20
|
+
return value
|
|
21
|
+
.toLowerCase()
|
|
22
|
+
.replace(/\s+/g, '-') // Replace spaces with hyphens
|
|
23
|
+
.replace(/[^\p{L}\p{N}-]/gu, '') // Remove special characters (keep Unicode letters/numbers)
|
|
24
|
+
.replace(/-+/g, '-') // Collapse multiple hyphens
|
|
25
|
+
.replace(/^-/, '') // Remove leading hyphen only
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Normalize a slug (for blur/final value).
|
|
30
|
+
* Same as toSlugLive but also trims and removes trailing hyphens.
|
|
31
|
+
*/
|
|
32
|
+
function toSlugFinal(value: string): string {
|
|
33
|
+
return toSlugLive(value.trim()).replace(/-$/, '') // Remove trailing hyphen
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default function SlugFormInput({
|
|
37
|
+
input,
|
|
38
|
+
direction,
|
|
39
|
+
disabled = false,
|
|
40
|
+
}: {
|
|
41
|
+
input: SlugFieldClientConfig
|
|
42
|
+
direction?: 'row' | 'col'
|
|
43
|
+
disabled?: boolean
|
|
44
|
+
}) {
|
|
45
|
+
const t = useI18n()
|
|
46
|
+
const { control } = useFormContext()
|
|
47
|
+
const {
|
|
48
|
+
field,
|
|
49
|
+
fieldState: { error },
|
|
50
|
+
} = useController({
|
|
51
|
+
name: input.name,
|
|
52
|
+
control,
|
|
53
|
+
defaultValue: input.value ?? '',
|
|
54
|
+
disabled: disabled,
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
// Watch the source field value
|
|
58
|
+
const sourceFieldValue = useWatch({
|
|
59
|
+
control,
|
|
60
|
+
name: input.forFieldName,
|
|
61
|
+
defaultValue: '',
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
// Track previous source value to only update when it actually changes
|
|
65
|
+
const previousSourceValueRef = useRef<string>(sourceFieldValue ?? '')
|
|
66
|
+
|
|
67
|
+
// Auto-generate slug from source field when it changes
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
const currentSourceValue = sourceFieldValue ?? ''
|
|
70
|
+
|
|
71
|
+
// Only update if the source field value actually changed
|
|
72
|
+
if (currentSourceValue !== previousSourceValueRef.current) {
|
|
73
|
+
previousSourceValueRef.current = currentSourceValue
|
|
74
|
+
|
|
75
|
+
if (currentSourceValue) {
|
|
76
|
+
const newSlug = toSlugFinal(currentSourceValue)
|
|
77
|
+
field.onChange(newSlug)
|
|
78
|
+
} else {
|
|
79
|
+
field.onChange('')
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}, [sourceFieldValue, field])
|
|
83
|
+
|
|
84
|
+
// Handle manual changes to the slug field
|
|
85
|
+
const handleChange = useCallback(
|
|
86
|
+
(e: React.ChangeEvent<HTMLInputElement>) => {
|
|
87
|
+
const newValue = e.target.value
|
|
88
|
+
// Apply slug normalization in real-time
|
|
89
|
+
field.onChange(toSlugLive(newValue))
|
|
90
|
+
},
|
|
91
|
+
[field],
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
// Handle blur - finalize the slug value (remove trailing hyphens)
|
|
95
|
+
const handleBlur = useCallback(() => {
|
|
96
|
+
field.onBlur()
|
|
97
|
+
if (field.value) {
|
|
98
|
+
const finalSlug = toSlugFinal(field.value)
|
|
99
|
+
if (finalSlug !== field.value) {
|
|
100
|
+
field.onChange(finalSlug)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}, [field])
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<FormInputElement
|
|
107
|
+
validationError={error}
|
|
108
|
+
value={input.value}
|
|
109
|
+
readonly={input.readonly}
|
|
110
|
+
label={input.label}
|
|
111
|
+
required={input.required}
|
|
112
|
+
>
|
|
113
|
+
<InputGroup className='bg-input'>
|
|
114
|
+
<InputGroupAddon align='inline-start' title={t('autoGeneratedFromLinkedField') as string}>
|
|
115
|
+
<Link2 className='h-4 w-4' />
|
|
116
|
+
</InputGroupAddon>
|
|
117
|
+
<InputGroupInput
|
|
118
|
+
placeholder={input.placeholder ? input.placeholder : input.label}
|
|
119
|
+
type='text'
|
|
120
|
+
readOnly={disabled}
|
|
121
|
+
disabled={field.disabled}
|
|
122
|
+
name={field.name}
|
|
123
|
+
onChange={handleChange}
|
|
124
|
+
onBlur={handleBlur}
|
|
125
|
+
value={field.value ?? ''}
|
|
126
|
+
ref={field.ref}
|
|
127
|
+
/>
|
|
128
|
+
</InputGroup>
|
|
129
|
+
</FormInputElement>
|
|
130
|
+
)
|
|
131
|
+
}
|