Skip to content

Commit 2220800

Browse files
Merge pull request #6383 from nextcloud-libraries/backport/6336/next
[next] fix(NcColorPicker): close popover on submit event
2 parents 926ac25 + 8ffed36 commit 2220800

File tree

2 files changed

+57
-54
lines changed

2 files changed

+57
-54
lines changed

src/components/NcColorPicker/NcColorPicker.vue

Lines changed: 55 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export default {
7171
<template>
7272
<div class="container1">
7373
<NcButton @click="open = !open"> Click Me </NcButton>
74-
<NcColorPicker v-model="color" v-model:shown="open" @submit="open = false" v-slot="{ attrs }">
74+
<NcColorPicker v-model="color" v-model:shown="open" v-slot="{ attrs }">
7575
<div v-bind="attrs" :style="{'background-color': color}" class="color1" />
7676
</NcColorPicker>
7777
</div>
@@ -143,57 +143,59 @@ export default {
143143
<template #trigger="slotProps">
144144
<slot v-bind="slotProps" />
145145
</template>
146-
<div role="dialog"
147-
class="color-picker"
148-
aria-modal="true"
149-
:aria-label="t('Color picker')"
150-
:class="{ 'color-picker--advanced-fields': advanced && advancedFields }">
151-
<Transition name="slide" mode="out-in">
152-
<div v-if="!advanced" class="color-picker__simple">
153-
<label v-for="({ color, name }, index) in normalizedPalette"
154-
:key="index"
155-
:style="{ backgroundColor: color }"
156-
class="color-picker__simple-color-circle"
157-
:class="{ 'color-picker__simple-color-circle--active' : color === currentColor }">
158-
<Check v-if="color === currentColor" :size="20" :fill-color="contrastColor" />
159-
<input type="radio"
160-
class="hidden-visually"
161-
:aria-label="name"
162-
:name="`color-picker-${uid}`"
163-
:checked="color === currentColor"
164-
@click="pickColor(color)">
165-
</label>
146+
<template #default="slotProps">
147+
<div role="dialog"
148+
class="color-picker"
149+
aria-modal="true"
150+
:aria-label="t('Color picker')"
151+
:class="{ 'color-picker--advanced-fields': advanced && advancedFields }">
152+
<Transition name="slide" mode="out-in">
153+
<div v-if="!advanced" class="color-picker__simple">
154+
<label v-for="({ color, name }, index) in normalizedPalette"
155+
:key="index"
156+
:style="{ backgroundColor: color }"
157+
class="color-picker__simple-color-circle"
158+
:class="{ 'color-picker__simple-color-circle--active' : color === currentColor }">
159+
<Check v-if="color === currentColor" :size="20" :fill-color="contrastColor" />
160+
<input type="radio"
161+
class="hidden-visually"
162+
:aria-label="name"
163+
:name="`color-picker-${uid}`"
164+
:checked="color === currentColor"
165+
@click="pickColor(color)">
166+
</label>
167+
</div>
168+
<Chrome v-else
169+
v-model="currentColor"
170+
class="color-picker__advanced"
171+
:disable-alpha="true"
172+
:disable-fields="!advancedFields"
173+
@update:model-value="pickColor" />
174+
</Transition>
175+
<div v-if="!paletteOnly" class="color-picker__navigation">
176+
<NcButton v-if="advanced"
177+
type="tertiary"
178+
:aria-label="ariaBack"
179+
@click="handleBack">
180+
<template #icon>
181+
<ArrowLeft :size="20" />
182+
</template>
183+
</NcButton>
184+
<NcButton v-else
185+
type="tertiary"
186+
:aria-label="ariaMore"
187+
@click="handleMoreSettings">
188+
<template #icon>
189+
<DotsHorizontal :size="20" />
190+
</template>
191+
</NcButton>
192+
<NcButton type="primary"
193+
@click="handleConfirm(slotProps.hide)">
194+
{{ t('Choose') }}
195+
</NcButton>
166196
</div>
167-
<Chrome v-else
168-
v-model="currentColor"
169-
class="color-picker__advanced"
170-
:disable-alpha="true"
171-
:disable-fields="!advancedFields"
172-
@update:model-value="pickColor" />
173-
</Transition>
174-
<div v-if="!paletteOnly" class="color-picker__navigation">
175-
<NcButton v-if="advanced"
176-
type="tertiary"
177-
:aria-label="ariaBack"
178-
@click="handleBack">
179-
<template #icon>
180-
<ArrowLeft :size="20" />
181-
</template>
182-
</NcButton>
183-
<NcButton v-else
184-
type="tertiary"
185-
:aria-label="ariaMore"
186-
@click="handleMoreSettings">
187-
<template #icon>
188-
<DotsHorizontal :size="20" />
189-
</template>
190-
</NcButton>
191-
<NcButton type="primary"
192-
@click="handleConfirm">
193-
{{ t('Choose') }}
194-
</NcButton>
195197
</div>
196-
</div>
198+
</template>
197199
</NcPopover>
198200
</template>
199201

@@ -324,13 +326,14 @@ export default defineComponent({
324326
325327
/**
326328
* Submit a picked colour and close picker
329+
* @param {Function} hideCallback callback to close popover
327330
*/
328-
handleConfirm() {
331+
handleConfirm(hideCallback) {
329332
/**
330333
* Emits a hexadecimal string e.g. '#ffffff'
331334
*/
332335
this.$emit('submit', this.currentColor)
333-
this.handleClose()
336+
hideCallback()
334337
335338
this.advanced = false
336339
},

src/components/NcPopover/NcPopover.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ See: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/
155155
</NcPopoverTriggerProvider>
156156

157157
<!-- This will be the content of the popover -->
158-
<template #popper>
159-
<slot />
158+
<template #popper="slotProps">
159+
<slot name="default" v-bind="slotProps" />
160160
</template>
161161
</Dropdown>
162162
</template>

0 commit comments

Comments
 (0)