-
Notifications
You must be signed in to change notification settings - Fork 451
Support "control after generate" in vue #6985
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
23fdbe4
f853cb9
57025df
cfaeed1
04bd165
6acc7b0
29af785
c18df9c
abe600b
fcf9a32
895a458
613fe12
94ade0a
0fb7466
95b95ed
69715b2
7dd2f52
307771b
bbcb3b4
ec07416
b5419f7
6d2f976
9348995
9723e2b
bb5c884
ff08660
52daf4e
ad70768
4b4b90d
a84fd7a
0b5ded8
a2391e6
5b6d835
939090f
26e6aec
1fa618c
1ddf364
cfb579b
d25cd39
679a1da
70f6d5b
ed25f72
488922a
9553233
437880c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,10 +5,8 @@ import { defineAsyncComponent, ref } from 'vue' | |
| import type { SimplifiedWidget } from '@/types/simplifiedWidget' | ||
|
|
||
| import { useControlButtonIcon } from '../composables/useControlButtonIcon' | ||
| import { | ||
| NumberControlMode, | ||
| useStepperControl | ||
| } from '../composables/useStepperControl' | ||
| import type { NumberControlMode } from '../composables/useStepperControl' | ||
| import { useStepperControl } from '../composables/useStepperControl' | ||
| import WidgetInputNumberInput from './WidgetInputNumberInput.vue' | ||
|
|
||
| const NumberControlPopover = defineAsyncComponent( | ||
|
|
@@ -20,31 +18,27 @@ const props = defineProps<{ | |
| readonly?: boolean | ||
| }>() | ||
|
|
||
| const emit = defineEmits<{ | ||
| 'update:modelValue': [value: number] | ||
| }>() | ||
|
|
||
| const modelValue = defineModel<number>({ default: 0 }) | ||
| const popover = ref() | ||
|
|
||
| const handleControlChange = (newValue: number) => { | ||
| modelValue.value = newValue | ||
| emit('update:modelValue', newValue) | ||
| } | ||
|
|
||
| const { controlMode } = useStepperControl(modelValue, { | ||
| ...props.widget.options, | ||
| onChange: handleControlChange | ||
| }) | ||
|
|
||
| if (controlMode.value === NumberControlMode.FIXED) { | ||
| controlMode.value = NumberControlMode.RANDOMIZE | ||
| } | ||
| const { controlMode } = useStepperControl( | ||
| modelValue, | ||
| { | ||
| ...props.widget.options, | ||
| onChange: handleControlChange | ||
| }, | ||
| props.widget.controlWidget!.value | ||
| ) | ||
|
||
|
|
||
| const controlButtonIcon = useControlButtonIcon(controlMode) | ||
|
|
||
| const setControlMode = (mode: NumberControlMode) => { | ||
| controlMode.value = mode | ||
| props.widget.controlWidget!.update(mode) | ||
| } | ||
|
|
||
| const togglePopover = (event: Event) => { | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2,6 +2,7 @@ import { onMounted, onUnmounted, ref } from 'vue' | |
| import type { Ref } from 'vue' | ||
|
|
||
| import { useGlobalSeedStore } from '@/stores/globalSeedStore' | ||
| import type { ControlWidgetOptions } from '@/types/simplifiedWidget' | ||
|
|
||
| import { numberControlRegistry } from '../services/NumberControlRegistry' | ||
|
|
||
|
|
@@ -21,11 +22,26 @@ interface StepperControlOptions { | |
| onChange?: (value: number) => void | ||
| } | ||
|
|
||
| function convertToEnum(str?: ControlWidgetOptions): NumberControlMode { | ||
| switch (str) { | ||
| case 'fixed': | ||
| return NumberControlMode.FIXED | ||
| case 'increment': | ||
| return NumberControlMode.INCREMENT | ||
| case 'decrement': | ||
| return NumberControlMode.DECREMENT | ||
| case 'randomize': | ||
| return NumberControlMode.RANDOMIZE | ||
| } | ||
| return NumberControlMode.RANDOMIZE | ||
| } | ||
|
||
|
|
||
| export function useStepperControl( | ||
| modelValue: Ref<number>, | ||
| options: StepperControlOptions | ||
| options: StepperControlOptions, | ||
| defaultValue?: ControlWidgetOptions | ||
| ) { | ||
| const controlMode = ref<NumberControlMode>(NumberControlMode.FIXED) | ||
| const controlMode = ref<NumberControlMode>(convertToEnum(defaultValue)) | ||
| const controlId = Symbol('numberControl') | ||
| const globalSeedStore = useGlobalSeedStore() | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,6 +15,16 @@ export type WidgetValue = | |
| | void | ||
| | File[] | ||
|
|
||
| export type ControlWidgetOptions = | ||
| | 'fixed' | ||
| | 'increment' | ||
| | 'decrement' | ||
| | 'randomize' | ||
|
||
| export type SafeControlWidget = { | ||
| value: ControlWidgetOptions | ||
| update: (value: unknown) => void | ||
| } | ||
|
|
||
| export interface SimplifiedWidget< | ||
| T extends WidgetValue = WidgetValue, | ||
| O = Record<string, any> | ||
|
|
@@ -45,4 +55,6 @@ export interface SimplifiedWidget< | |
|
|
||
| /** Optional method to compute widget size requirements */ | ||
| computeSize?: () => { minHeight: number; maxHeight?: number } | ||
|
|
||
| controlWidget?: SafeControlWidget | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.