Skip to content

Commit 0064071

Browse files
committed
feat(FormGenerator): exclude components from global registry
Fixes #35
1 parent 4076024 commit 0064071

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

src/fields/index.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { App, Component } from 'vue'
2+
import type { FieldPluginOptions } from '@/resources/types/generic'
23

34
import FieldText from '@/fields/core/FieldText.vue'
4-
import FieldCheckBox from '@/fields/core/FieldCheckbox.vue'
55
import FieldPassword from '@/fields/core/FieldPassword.vue'
66
import FieldSelect from '@/fields/core/FieldSelect.vue'
77
import FieldSelectNative from '@/fields/core/FieldSelectNative.vue'
@@ -21,20 +21,22 @@ import FieldButton from '@/fields/core/FieldButton.vue'
2121

2222

2323
const fieldComponents = {
24-
FieldColor, FieldText, FieldCheckBox, FieldPassword, FieldSelect, FieldSelectNative, FieldRadio,
25-
FieldNumber, FieldSubmit, FieldReset, FieldButton, FieldSwitch, FieldTextarea, FieldMask, FieldChecklist,
26-
FieldCheckbox, FieldObject
24+
FieldColor, FieldText, FieldPassword, FieldSelect, FieldSelectNative, FieldRadio, FieldNumber, FieldSubmit,
25+
FieldReset, FieldButton, FieldSwitch, FieldTextarea, FieldMask, FieldChecklist, FieldCheckbox, FieldObject
2726
} as const
2827

2928
type FieldComponentNames = keyof typeof fieldComponents
3029

3130
export default {
32-
install (app: App, aliases: Partial<Record<FieldComponentNames, string>>) {
31+
install (app: App, options: FieldPluginOptions) {
3332
const componentEntries = Object.entries(fieldComponents) as [FieldComponentNames, Component][]
33+
const isExcluded = (componentName: string) => options.excludedComponents ? options.excludedComponents.includes(componentName) : false
3434

3535
for (const [ name, component ] of componentEntries) {
36-
const alias: string | undefined = aliases[name]
37-
app.component(alias ?? name, component)
36+
if (!isExcluded(name)) {
37+
const alias: string | undefined = options.aliases ? options.aliases[name] : undefined
38+
app.component(alias ?? name, component)
39+
}
3840
}
3941
}
4042
}

src/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { App } from 'vue'
2-
import { PluginOptions } from '@/resources/types/generic'
2+
import { FieldPluginOptions, PluginOptions } from '@/resources/types/generic'
33

44
import { setMessages } from '@/validators/messages'
55
import { isObject } from '@/helpers'
@@ -19,7 +19,10 @@ const VueFormGenerator = {
1919
install (app: App, options: PluginOptions) {
2020
if (!options) options = {}
2121

22-
app.use(FormGeneratorFields, options.aliases ?? {})
22+
const fieldOptions: FieldPluginOptions = {
23+
aliases: options.aliases, excludedComponents: options.excludedComponents
24+
}
25+
app.use(FormGeneratorFields, fieldOptions)
2326
app.component('VueFormGenerator', FormGenerator)
2427

2528
if (options.messages !== undefined && isObject(options.messages)) {

src/resources/types/generic.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ export type PluginOptions = {
1414
aliases?: Record<string, string>;
1515
messages?: Record<string, string>;
1616
components?: PluginComponentOption[];
17+
excludedComponents?: string[];
18+
}
19+
20+
export type FieldPluginOptions = {
21+
aliases?: PluginOptions['aliases'];
22+
excludedComponents?: PluginOptions['excludedComponents'];
1723
}
1824

1925
export type FormGeneratorSchema = {

0 commit comments

Comments
 (0)