Skip to content

Commit

Permalink
FIX: Reactivity changed regarding isPickerOpen
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinfaveri committed Mar 28, 2020
1 parent baf16b8 commit 45ae709
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 15 deletions.
2 changes: 2 additions & 0 deletions docs/docs/changelog/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ title: 'Changelog'

## 5.5.5
- when randomEmojiArray is changed it now triggers a component update
- when isPickerOpen (TwemojiPicker data) is changed it now triggers a component update
- setting emojiPickerDisabled to true will now set isPickerOpen to false

## 5.5.4
- Adds contentChangedHtml event to TwemojiTextarea
Expand Down
10 changes: 5 additions & 5 deletions src/components/PopupEmoji.vue
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,11 @@ export default Vue.extend({
},
watch: {
popperOpen: function(val): void {
if (val) {
this.$refs.container.setAttribute('data-show', '');
} else {
this.$refs.container.removeAttribute('data-show');
}
this.$emit('popperOpenChanged', val);
setTimeout(() => {
this.debouncedPopperOpen = val;
Expand All @@ -196,12 +201,10 @@ export default Vue.extend({
const ctxPopperInstance = this.popperInstance;
if (this.$refs.container.hasAttribute('data-show')) {
this.$refs.container.removeAttribute('data-show');
this.popperOpen = false;
setTimeout(ctxPopperInstance.forceUpdate, 1);
} else {
this.popperOpen = true;
this.$refs.container.setAttribute('data-show', '');
setTimeout(ctxPopperInstance.forceUpdate, 1);
}
},
Expand All @@ -210,7 +213,6 @@ export default Vue.extend({
const ctxPopperInstance = this.popperInstance;
if (this.debouncedPopperOpen) {
this.$refs.container.removeAttribute('data-show');
this.popperOpen = false;
setTimeout(ctxPopperInstance.forceUpdate, 1);
}
Expand All @@ -220,12 +222,10 @@ export default Vue.extend({
const ctxPopperInstance = this.popperInstance;
if (this.$refs.container.hasAttribute('data-show')) {
this.$refs.container.removeAttribute('data-show');
this.popperOpen = false;
setTimeout(ctxPopperInstance.forceUpdate, 1);
} else {
this.popperOpen = true;
this.$refs.container.setAttribute('data-show', '');
setTimeout(ctxPopperInstance.forceUpdate, 1);
}
}
Expand Down
21 changes: 18 additions & 3 deletions src/components/Sandbox.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
:emojiData="emojiDataAll"
:emojiGroups="emojiGroups"
pickerPlacement="top-end"
:randomEmojiArray="randomEmojiArray"
ref="picker"
:emojiPickerDisabled="emojiPickerDisabled"
>
</twemoji-picker>
<button @click="onClickTest">Working Test</button>
</div>
<div>
<twemoji-textarea
Expand All @@ -30,7 +31,10 @@
:pickerArrowEnabled="true"
idTextarea="idTextarea"
pickerWidth="#idTextarea"
:randomEmojiArray="randomEmojiArray"
:emojiPickerDisabled="emojiPickerDisabled"
></twemoji-textarea>
<button @click="onClickTest">Working Test</button>
</div>
<div>
<twemoji-textarea
Expand Down Expand Up @@ -99,13 +103,14 @@ export default Vue.extend({
data() {
return {
content: '',
randomEmojiArray: ['😀']
randomEmojiArray: ['😀'],
emojiPickerDisabled: false
};
},
mounted() {
this.$watch(
() => {
return this.$refs.picker.isPickerOpen;
return this.$refs.twemojiTextareaRef.twemojiPicker.isPickerOpen;
},
(value: boolean) => {
this.randomEmojiArray = value ? ['😄'] : ['🙂'];
Expand Down Expand Up @@ -162,6 +167,16 @@ export default Vue.extend({
},
isContentOverflowed(isContentOverflowed: boolean) {
console.log('isContentOverflowed', isContentOverflowed);
},
onClickTest() {
this.emojiPickerDisabled = !this.emojiPickerDisabled;
},
testChangeIsPickerOpen1() {
this.$refs.picker.isPickerOpen = !this.$refs.picker.isPickerOpen;
},
testChangeIsPickerOpen2() {
this.$refs.twemojiTextareaRef.twemojiPicker.isPickerOpen = !this.$refs
.twemojiTextareaRef.twemojiPicker.isPickerOpen;
}
}
});
Expand Down
16 changes: 12 additions & 4 deletions src/components/TwemojiPicker/TwemojiPicker.vue
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ import TwemojiOptions from '../../interfaces/TwemojiOptions';
import EmojiGroup from '../../interfaces/EmojiGroup';
import Props from './props';
import PropWatchers from './prop-watchers';
import EmojiSkin from '../../interfaces/EmojiSkin';
export default Vue.extend({
Expand All @@ -321,7 +322,6 @@ export default Vue.extend({
data() {
return {
isPickerOpen: false as boolean,
clickingSkinInterval: false as any,
isClickingEmojiMouseDown: false as boolean,
popupSkinsClickaway: true as boolean,
Expand All @@ -346,7 +346,8 @@ export default Vue.extend({
searchTimeout: null as any,
isSearchingEmoji: false as boolean,
calculatedPickerWidth: null as number | null,
hideSearch: false as boolean
hideSearch: false as boolean,
isPickerOpen: false as boolean
};
},
Expand All @@ -368,6 +369,9 @@ export default Vue.extend({
},
created(): void {
// Init TwemojiPicker watchers
PropWatchers(this, this);
this.twemojiOptions = {
base: this.twemojiPath,
ext: this.twemojiExtension,
Expand All @@ -381,8 +385,12 @@ export default Vue.extend({
this.setRandomEmoji();
},
watch: {
randomEmojiArray() {
this.setRandomEmoji();
// Data Watchers
isPickerOpen(value) {
if (value !== this.$refs.popupEmoji.popperOpen) {
this.$refs.popupEmoji.popperOpen = value;
setTimeout(() => this.$refs.popupEmoji.popperInstance.forceUpdate(), 1);
}
},
randomEmoji() {
setTimeout(() => this.$refs.popupEmoji.popperInstance.forceUpdate(), 100);
Expand Down
13 changes: 13 additions & 0 deletions src/components/TwemojiPicker/prop-watchers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export default (componentRef: any, twemojiPickerRef: any) => {
componentRef.$watch('randomEmojiArray',
() => twemojiPickerRef.setRandomEmoji()
);

componentRef.$watch('emojiPickerDisabled',
(value: boolean) => {
if (value === true) {
twemojiPickerRef.$refs.popupEmoji.popperOpen = false;
}
}
);
}
2 changes: 1 addition & 1 deletion src/components/TwemojiPicker/props.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,6 @@ export default {
console.error('The Array must have a length of one or more.');
}
return true;
}
},
}
}
8 changes: 6 additions & 2 deletions src/components/TwemojiTextarea.vue
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ import SendIconImg from './SendIconImg.vue';
import TwemojiOptions from '../interfaces/TwemojiOptions';
import TwemojiProps from './TwemojiPicker/props';
import TwemojiPropWatchers from './TwemojiPicker/prop-watchers';
import { propsForMixin } from '../mixins/propsFor';
export default Vue.extend({
Expand Down Expand Up @@ -183,10 +184,10 @@ export default Vue.extend({
},
computed: {
twemojiTextarea(): HTMLElement {
twemojiTextarea(): any {
return this.$refs.twemojiTextarea as HTMLElement;
},
twemojiPicker(): HTMLElement {
twemojiPicker(): any {
return this.$refs.twemojiPicker as any;
}
},
Expand All @@ -200,6 +201,9 @@ export default Vue.extend({
},
mounted(): void {
// Init TwemojiPicker watchers
TwemojiPropWatchers(this, this.twemojiPicker);
if (this.content.length === 0) {
this.twemojiTextarea.innerHTML = this.content;
}
Expand Down

0 comments on commit 45ae709

Please sign in to comment.