Skip to content
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

add tutorialstore #107

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions src/components/Studio/Mapstories/EditMapstoryView/helpMessages.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { StoryStep } from '@prisma/client'
import { useBoundStore } from '@/src/lib/store/store'
import { XMarkIcon } from '@heroicons/react/24/outline'

type HelpMessagesProps = {
currentStep: StoryStep
firstStepId: string | undefined
}

export default function HelpMessages({
currentStep,
firstStepId,
}: HelpMessagesProps) {
const titleSlide = useBoundStore(state => state.titleslide)
const setTitleSlide = useBoundStore(state => state.setTitleSlide)
const noMarkerOnSlide = useBoundStore(state => state.noMarkerOnSlide)
const setNoMarkerOnSlide = useBoundStore(state => state.setNoMarkerOnSlide)
const dragMarker = useBoundStore(state => state.dragMarker)
const setDragMarker = useBoundStore(state => state.setDragMarker)

let message, onClick

if (titleSlide && currentStep.id === firstStepId) {
message = 'Dies ist deine Titelfolie.'
onClick = () => setTitleSlide(false)
} else if (noMarkerOnSlide && !currentStep?.feature) {
message = 'Klicke auf die Karte um deinen Marker hinzuzufügen'
onClick = () => setNoMarkerOnSlide(false)
} else if (
dragMarker &&
currentStep?.feature &&
currentStep.id !== firstStepId
) {
message = 'Verschiebe den roten Marker um dessen Position zu ändern'
onClick = () => setDragMarker(false)
} else {
return null
}

return (
<span className="flex">
{message}
<XMarkIcon
className="ml-2 h-4 w-5 hover:cursor-pointer"
onClick={onClick}
/>
</span>
)
}
17 changes: 6 additions & 11 deletions src/components/Studio/Mapstories/EditMapstoryView/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import useStory from '@/src/lib/api/story/useStory'
import { Spinner } from '@/src/components/Elements/Spinner'
import { StudioShell } from '../../Shell'
import EditMapstoryMap from './EditMapstoryMap'
import HelpMessages from './helpMessages'

type EditMapstoryViewProps = {
story: Story & {
Expand All @@ -21,7 +22,6 @@ export default function EditMapstoryView({ story }: EditMapstoryViewProps) {
const path = usePathname()

const { story: currentStory } = useStory(story.id)

useEffect(() => {
const stepId = path?.split('/').at(-1)
const currentStep = currentStory?.steps?.find(s => s.id === stepId)
Expand All @@ -46,16 +46,11 @@ export default function EditMapstoryView({ story }: EditMapstoryViewProps) {
<StudioShell>
<div className="re-studio-height-full-screen absolute top-0 z-10 w-full overflow-hidden rounded-lg shadow">
<div className="absolute top-0 z-20 w-full ">
<div className=" mapboxgl-ctrl-group mx-auto mt-2 w-fit px-3 py-1 text-center text-sm text-black">
{currentStep.id === story.firstStepId ? (
<span>Dies ist deine Titelfolie. </span>
) : !currentStep?.feature ? (
<span>Klicke auf die Karte um deinen Marker hinzuzufügen</span>
) : (
<span>
Verschiebe den roten Marker um dessen Position zu ändern
</span>
)}
<div className=" mapboxgl-ctrl-group mx-auto mt-2 w-max px-3 py-1 text-center text-sm text-black">
<HelpMessages
currentStep={currentStep}
firstStepId={story.firstStepId ?? undefined}
/>
</div>
</div>

Expand Down
5 changes: 5 additions & 0 deletions src/lib/store/CombinedState.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { UIState } from './ui'
import { TutorialState } from './tutorial'
import { StoryState } from './story'

export type CombinedState = UIState & TutorialState & StoryState
9 changes: 6 additions & 3 deletions src/lib/store/store.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import { create } from 'zustand'
import { StoryState, useStoryStore } from './story'
import { UIState, useUIStore } from './ui'
import { useStoryStore } from './story'
import { useUIStore } from './ui'
import { persist } from 'zustand/middleware'
import { useTutorialStore } from './tutorial'
import { CombinedState } from './CombinedState'

export const useBoundStore = create(
persist<StoryState & UIState>(
persist<CombinedState>(
(set, get, api) => ({
...useStoryStore(set, get, api),
...useUIStore(set, get, api),
...useTutorialStore(set, get, api),
}),
{
name: 'bound-store',
Expand Down
4 changes: 2 additions & 2 deletions src/lib/store/story.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { StateCreator } from 'zustand'
import { UIState } from './ui'
import { CombinedState } from './CombinedState'

export interface StoryState {
storyID: string
Expand All @@ -13,7 +13,7 @@ export interface StoryState {
}

export const useStoryStore: StateCreator<
StoryState & UIState,
CombinedState,
[],
[],
StoryState
Expand Down
26 changes: 26 additions & 0 deletions src/lib/store/tutorial.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { StateCreator } from 'zustand'
import { UIState } from './ui'
import { StoryState } from './story'

export interface TutorialState {
titleslide: boolean
noMarkerOnSlide: boolean
dragMarker: boolean
setTitleSlide: (titleslide: boolean) => void
setNoMarkerOnSlide: (noMarkerOnSlide: boolean) => void
setDragMarker: (dragMarker: boolean) => void
}

export const useTutorialStore: StateCreator<
StoryState & UIState & TutorialState,
[],
[],
TutorialState
> = set => ({
titleslide: true,
setTitleSlide: (titleslide: boolean) => set({ titleslide }),
noMarkerOnSlide: true,
setNoMarkerOnSlide: (noMarkerOnSlide: boolean) => set({ noMarkerOnSlide }),
dragMarker: true,
setDragMarker: (dragMarker: boolean) => set({ dragMarker }),
})
4 changes: 2 additions & 2 deletions src/lib/store/ui.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { StateCreator } from 'zustand'
import { StoryState } from './story'
import { CombinedState } from './CombinedState'

export interface UIState {
language: string
setLanguage: (lng: string) => void
}

export const useUIStore: StateCreator<
StoryState & UIState,
CombinedState,
[],
[],
UIState
Expand Down