116 lines
3.0 KiB
TypeScript
116 lines
3.0 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
|
|
interface InputState {
|
|
inputMessage: string;
|
|
inputLineCount: number;
|
|
inputIsMultiline: boolean;
|
|
inputIsFocused: boolean;
|
|
quickMenuOpen: boolean;
|
|
toolMenuOpen: boolean;
|
|
settingsOpen: boolean;
|
|
imagePickerOpen: boolean;
|
|
selectedImages: string[];
|
|
videoPickerOpen: boolean;
|
|
selectedVideos: string[];
|
|
}
|
|
|
|
export const useInputStore = defineStore('input', {
|
|
state: (): InputState => ({
|
|
inputMessage: '',
|
|
inputLineCount: 1,
|
|
inputIsMultiline: false,
|
|
inputIsFocused: false,
|
|
quickMenuOpen: false,
|
|
toolMenuOpen: false,
|
|
settingsOpen: false,
|
|
imagePickerOpen: false,
|
|
selectedImages: [],
|
|
videoPickerOpen: false,
|
|
selectedVideos: []
|
|
}),
|
|
actions: {
|
|
setInputMessage(value: string) {
|
|
this.inputMessage = value;
|
|
},
|
|
clearInputMessage() {
|
|
this.inputMessage = '';
|
|
},
|
|
setInputLineCount(count: number) {
|
|
this.inputLineCount = count;
|
|
},
|
|
setInputMultiline(multiline: boolean) {
|
|
this.inputIsMultiline = multiline;
|
|
},
|
|
setInputFocused(focused: boolean) {
|
|
this.inputIsFocused = focused;
|
|
},
|
|
openQuickMenu() {
|
|
this.quickMenuOpen = true;
|
|
},
|
|
setQuickMenuOpen(open: boolean) {
|
|
this.quickMenuOpen = open;
|
|
if (!open) {
|
|
this.toolMenuOpen = false;
|
|
this.settingsOpen = false;
|
|
}
|
|
},
|
|
toggleQuickMenu() {
|
|
const next = !this.quickMenuOpen;
|
|
this.setQuickMenuOpen(next);
|
|
return next;
|
|
},
|
|
closeMenus() {
|
|
this.quickMenuOpen = false;
|
|
this.toolMenuOpen = false;
|
|
this.settingsOpen = false;
|
|
},
|
|
toggleToolMenu() {
|
|
this.toolMenuOpen = !this.toolMenuOpen;
|
|
return this.toolMenuOpen;
|
|
},
|
|
setToolMenuOpen(open: boolean) {
|
|
this.toolMenuOpen = open;
|
|
},
|
|
toggleSettingsMenu() {
|
|
this.settingsOpen = !this.settingsOpen;
|
|
return this.settingsOpen;
|
|
},
|
|
setSettingsOpen(open: boolean) {
|
|
this.settingsOpen = open;
|
|
},
|
|
setImagePickerOpen(open: boolean) {
|
|
this.imagePickerOpen = open;
|
|
},
|
|
setVideoPickerOpen(open: boolean) {
|
|
this.videoPickerOpen = open;
|
|
},
|
|
setSelectedImages(list: string[]) {
|
|
this.selectedImages = list.slice(0, 9);
|
|
},
|
|
addSelectedImage(path: string) {
|
|
if (!path) return;
|
|
const next = Array.from(new Set([...this.selectedImages, path]));
|
|
this.selectedImages = next.slice(0, 9);
|
|
},
|
|
removeSelectedImage(path: string) {
|
|
this.selectedImages = this.selectedImages.filter(item => item !== path);
|
|
},
|
|
clearSelectedImages() {
|
|
this.selectedImages = [];
|
|
},
|
|
setSelectedVideos(list: string[]) {
|
|
this.selectedVideos = list.slice(0, 1);
|
|
},
|
|
addSelectedVideo(path: string) {
|
|
if (!path) return;
|
|
this.selectedVideos = [path];
|
|
},
|
|
removeSelectedVideo(path: string) {
|
|
this.selectedVideos = this.selectedVideos.filter(item => item !== path);
|
|
},
|
|
clearSelectedVideos() {
|
|
this.selectedVideos = [];
|
|
}
|
|
}
|
|
});
|