From dd8c4727a35090992b601257276a81d87ccf6ff6 Mon Sep 17 00:00:00 2001 From: Alexis <35.alexis.pele@gmail.com> Date: Sat, 6 Apr 2024 22:13:39 +0200 Subject: [PATCH] Added character list in search --- src/components/calendar/CalendarEvent.vue | 2 +- .../calendar/CalendarEventDetails.vue | 2 +- src/components/calendar/CalendarMenu.vue | 4 +- src/components/calendar/CalendarMenuNav.vue | 2 +- .../calendar/CalendarMenuSearch.vue | 89 ----------- .../calendar/CalendarMenuSearchResults.vue | 49 ------ src/components/calendar/CalendarSwitch.vue | 4 +- src/components/calendar/CalendarTile.vue | 2 +- src/components/calendar/Search.ts | 3 + .../calendar/search/CalendarSearch.vue | 150 ++++++++++++++++++ .../calendar/search/lists/SearchList.vue | 99 ++++++++++++ src/components/calendar/state/Monthly.vue | 2 +- src/components/ui/tabs/Tabs.vue | 15 ++ src/components/ui/tabs/TabsContent.vue | 27 ++++ src/components/ui/tabs/TabsList.vue | 27 ++++ src/components/ui/tabs/TabsTrigger.vue | 29 ++++ src/components/ui/tabs/index.ts | 4 + .../ui/toggle-group/ToggleGroup.vue | 44 +++++ .../ui/toggle-group/ToggleGroupItem.vue | 43 +++++ src/components/ui/toggle-group/index.ts | 2 + src/components/ui/toggle/Toggle.vue | 37 +++++ src/components/ui/toggle/index.ts | 26 +++ src/models/Characters.ts | 12 ++ src/models/Date.ts | 2 +- src/models/Events.ts | 20 +++ src/stores/calendar.ts | 6 +- src/stores/characters.ts | 8 +- src/stores/events.ts | 24 +-- 28 files changed, 556 insertions(+), 178 deletions(-) delete mode 100644 src/components/calendar/CalendarMenuSearch.vue delete mode 100644 src/components/calendar/CalendarMenuSearchResults.vue create mode 100644 src/components/calendar/Search.ts create mode 100644 src/components/calendar/search/CalendarSearch.vue create mode 100644 src/components/calendar/search/lists/SearchList.vue create mode 100644 src/components/ui/tabs/Tabs.vue create mode 100644 src/components/ui/tabs/TabsContent.vue create mode 100644 src/components/ui/tabs/TabsList.vue create mode 100644 src/components/ui/tabs/TabsTrigger.vue create mode 100644 src/components/ui/tabs/index.ts create mode 100644 src/components/ui/toggle-group/ToggleGroup.vue create mode 100644 src/components/ui/toggle-group/ToggleGroupItem.vue create mode 100644 src/components/ui/toggle-group/index.ts create mode 100644 src/components/ui/toggle/Toggle.vue create mode 100644 src/components/ui/toggle/index.ts create mode 100644 src/models/Characters.ts create mode 100644 src/models/Events.ts diff --git a/src/components/calendar/CalendarEvent.vue b/src/components/calendar/CalendarEvent.vue index eecc0b6..1b1e22a 100644 --- a/src/components/calendar/CalendarEvent.vue +++ b/src/components/calendar/CalendarEvent.vue @@ -1,6 +1,6 @@ @@ -31,7 +31,7 @@ const { currentDate } = useCalendar()
- +
diff --git a/src/components/calendar/CalendarMenuNav.vue b/src/components/calendar/CalendarMenuNav.vue index b42b5f9..6f9fa2e 100644 --- a/src/components/calendar/CalendarMenuNav.vue +++ b/src/components/calendar/CalendarMenuNav.vue @@ -1,13 +1,13 @@ diff --git a/src/components/calendar/CalendarMenuSearch.vue b/src/components/calendar/CalendarMenuSearch.vue deleted file mode 100644 index f9d9be4..0000000 --- a/src/components/calendar/CalendarMenuSearch.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - diff --git a/src/components/calendar/CalendarMenuSearchResults.vue b/src/components/calendar/CalendarMenuSearchResults.vue deleted file mode 100644 index d29934b..0000000 --- a/src/components/calendar/CalendarMenuSearchResults.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/src/components/calendar/CalendarSwitch.vue b/src/components/calendar/CalendarSwitch.vue index 727e7ec..8432b47 100644 --- a/src/components/calendar/CalendarSwitch.vue +++ b/src/components/calendar/CalendarSwitch.vue @@ -7,10 +7,10 @@ import { DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' -import Button from '../ui/button/Button.vue' import { useCalendar } from '@/stores/calendar' -import { computed } from 'vue' import { PhCalendarBlank } from '@phosphor-icons/vue' +import { computed } from 'vue' +import Button from '../ui/button/Button.vue' const { currentConfig, viewTypeOptions, getViewTypeTitle, setViewType } = useCalendar() diff --git a/src/components/calendar/CalendarTile.vue b/src/components/calendar/CalendarTile.vue index 0945f58..f7184e9 100644 --- a/src/components/calendar/CalendarTile.vue +++ b/src/components/calendar/CalendarTile.vue @@ -2,9 +2,9 @@ import type { LeimDate } from '@/models/Date' import { useCalendar } from '@/stores/calendar' import { useCalendarEvents } from '@/stores/events' +import { storeToRefs } from 'pinia' import { computed } from 'vue' import CalendarEvent from './CalendarEvent.vue' -import { storeToRefs } from 'pinia' const props = defineProps<{ date: LeimDate diff --git a/src/components/calendar/Search.ts b/src/components/calendar/Search.ts new file mode 100644 index 0000000..b565e1c --- /dev/null +++ b/src/components/calendar/Search.ts @@ -0,0 +1,3 @@ +export const searchUnifier = new RegExp(/[^a-zA-Z0-9\-'']/g) + +export type SearchMode = 'characters' | 'events' | undefined diff --git a/src/components/calendar/search/CalendarSearch.vue b/src/components/calendar/search/CalendarSearch.vue new file mode 100644 index 0000000..4a0a4dd --- /dev/null +++ b/src/components/calendar/search/CalendarSearch.vue @@ -0,0 +1,150 @@ + + + diff --git a/src/components/calendar/search/lists/SearchList.vue b/src/components/calendar/search/lists/SearchList.vue new file mode 100644 index 0000000..0a683b6 --- /dev/null +++ b/src/components/calendar/search/lists/SearchList.vue @@ -0,0 +1,99 @@ + + + diff --git a/src/components/calendar/state/Monthly.vue b/src/components/calendar/state/Monthly.vue index 97ff335..60cceaa 100644 --- a/src/components/calendar/state/Monthly.vue +++ b/src/components/calendar/state/Monthly.vue @@ -1,9 +1,9 @@ + + diff --git a/src/components/ui/tabs/TabsContent.vue b/src/components/ui/tabs/TabsContent.vue new file mode 100644 index 0000000..475dc94 --- /dev/null +++ b/src/components/ui/tabs/TabsContent.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/ui/tabs/TabsList.vue b/src/components/ui/tabs/TabsList.vue new file mode 100644 index 0000000..4d6c7f7 --- /dev/null +++ b/src/components/ui/tabs/TabsList.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/ui/tabs/TabsTrigger.vue b/src/components/ui/tabs/TabsTrigger.vue new file mode 100644 index 0000000..79c4dc9 --- /dev/null +++ b/src/components/ui/tabs/TabsTrigger.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/ui/tabs/index.ts b/src/components/ui/tabs/index.ts new file mode 100644 index 0000000..fbea0c6 --- /dev/null +++ b/src/components/ui/tabs/index.ts @@ -0,0 +1,4 @@ +export { default as Tabs } from './Tabs.vue' +export { default as TabsTrigger } from './TabsTrigger.vue' +export { default as TabsList } from './TabsList.vue' +export { default as TabsContent } from './TabsContent.vue' diff --git a/src/components/ui/toggle-group/ToggleGroup.vue b/src/components/ui/toggle-group/ToggleGroup.vue new file mode 100644 index 0000000..3ff029e --- /dev/null +++ b/src/components/ui/toggle-group/ToggleGroup.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/components/ui/toggle-group/ToggleGroupItem.vue b/src/components/ui/toggle-group/ToggleGroupItem.vue new file mode 100644 index 0000000..af7ca39 --- /dev/null +++ b/src/components/ui/toggle-group/ToggleGroupItem.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/ui/toggle-group/index.ts b/src/components/ui/toggle-group/index.ts new file mode 100644 index 0000000..9f89ad7 --- /dev/null +++ b/src/components/ui/toggle-group/index.ts @@ -0,0 +1,2 @@ +export { default as ToggleGroup } from './ToggleGroup.vue' +export { default as ToggleGroupItem } from './ToggleGroupItem.vue' diff --git a/src/components/ui/toggle/Toggle.vue b/src/components/ui/toggle/Toggle.vue new file mode 100644 index 0000000..8092669 --- /dev/null +++ b/src/components/ui/toggle/Toggle.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/components/ui/toggle/index.ts b/src/components/ui/toggle/index.ts new file mode 100644 index 0000000..6eed09f --- /dev/null +++ b/src/components/ui/toggle/index.ts @@ -0,0 +1,26 @@ +import { type VariantProps, cva } from 'class-variance-authority' + +export { default as Toggle } from './Toggle.vue' + +export const toggleVariants = cva( + 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground', + { + variants: { + variant: { + default: 'bg-transparent', + outline: 'border border-input bg-transparent hover:bg-accent hover:text-accent-foreground' + }, + size: { + default: 'h-10 px-3', + sm: 'h-9 px-2.5', + lg: 'h-11 px-5' + } + }, + defaultVariants: { + variant: 'default', + size: 'default' + } + } +) + +export type ToggleVariants = VariantProps diff --git a/src/models/Characters.ts b/src/models/Characters.ts new file mode 100644 index 0000000..6373603 --- /dev/null +++ b/src/models/Characters.ts @@ -0,0 +1,12 @@ +import type { LeimDate } from './Date' + +export interface Character { + name: string + description?: string + birth?: LeimDate + death?: LeimDate +} + +export function isCharacter(object: any): object is Character { + return 'birth' in object +} diff --git a/src/models/Date.ts b/src/models/Date.ts index 6c8950a..dcad803 100644 --- a/src/models/Date.ts +++ b/src/models/Date.ts @@ -1,4 +1,4 @@ -export type LeimDate = { +export interface LeimDate { day: number month: number year: number diff --git a/src/models/Events.ts b/src/models/Events.ts new file mode 100644 index 0000000..720794e --- /dev/null +++ b/src/models/Events.ts @@ -0,0 +1,20 @@ +import type { LeimDate } from './Date' + +export interface CalendarEvent { + title: string + date: LeimDate + description?: string + category?: CalendarEventCategory +} + +export type CalendarEventCategory = + | 'birth' + | 'death' + | 'catastrophe' + | 'legal' + | 'natural-disaster' + | 'player' + +export function isCalendarEvent(object: any): object is CalendarEvent { + return 'date' in object +} diff --git a/src/stores/calendar.ts b/src/stores/calendar.ts index ba640df..4d05170 100644 --- a/src/stores/calendar.ts +++ b/src/stores/calendar.ts @@ -1,8 +1,8 @@ -import { computed, type Ref, type ComputedRef, ref } from 'vue' -import { defineStore } from 'pinia' -import { useUrlSearchParams } from '@vueuse/core' import type { LeimDate, LeimPeriod, LeimPeriodShort } from '@/models/Date' import { isDigit, isInt, isSignedInt } from '@/utils/Regex' +import { useUrlSearchParams } from '@vueuse/core' +import { defineStore } from 'pinia' +import { computed, ref, type ComputedRef, type Ref } from 'vue' type CalendarViewType = 'month' | 'year' | 'decade' | 'century' diff --git a/src/stores/characters.ts b/src/stores/characters.ts index 58d9023..f4eb0a6 100644 --- a/src/stores/characters.ts +++ b/src/stores/characters.ts @@ -1,13 +1,7 @@ +import type { Character } from '@/models/Characters' import { defineStore } from 'pinia' -import type { LeimDate } from '@/models/Date' import { computed, type ComputedRef } from 'vue' -export type Character = { - name: string - birth?: LeimDate - death?: LeimDate -} - export const useCharacters = defineStore('characters', () => { const characters: Character[] = [ // Counts of the Alliance diff --git a/src/stores/events.ts b/src/stores/events.ts index 7599a72..d505ef9 100644 --- a/src/stores/events.ts +++ b/src/stores/events.ts @@ -1,24 +1,8 @@ +import type { CalendarEvent } from '@/models/Events' import { defineStore } from 'pinia' -import { computed, watch, type Ref, ref, toRaw } from 'vue' -import { useCharacters } from './characters' - -import type { LeimDate } from '@/models/Date' +import { computed, ref, watch, type Ref } from 'vue' import { useCalendar } from './calendar' - -export type CalendarEvent = { - title: string - date: LeimDate - description?: string - category?: CalendarEventCategory -} - -export type CalendarEventCategory = - | 'birth' - | 'death' - | 'catastrophe' - | 'legal' - | 'natural-disaster' - | 'player' +import { useCharacters } from './characters' export const useCalendarEvents = defineStore('calendar-events', () => { const { currentDate, currentConfig } = useCalendar() @@ -130,5 +114,5 @@ export const useCalendarEvents = defineStore('calendar-events', () => { return allEvents.value.filter((event) => shouldEventBeDisplayed(event)) } - return { allEvents, currentEvents } + return { baseEvents, allEvents, currentEvents } })