summaryrefslogtreecommitdiff
path: root/src/lib/maps/stores/useMaps.js
blob: f7636c2437c2fbad19c7585d9753f7db7f5f2ffc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { create } from "zustand";

const DEFAULT_CENTER = { lat: -6.2, lng: 106.816666 };

export const useMaps = create((set, get) => ({
  // ==== STATE ====
  selectedPosition: null,
  addressMaps: '',
  detailAddress: {},
  pinedMaps: false,

  // posisi sementara (create/edit)
  tempPositionCreate: null,
  tempPositionEdit: null,

  // ==== SETTERS ====
  setSelectedPosition: (position) => set({ selectedPosition: position }),
  setAddressMaps: (addressMaps) => set({ addressMaps }),
  setDetailAddress: (detailAddress) => set({ detailAddress }),
  setPinedMaps: (pinedMaps) => set({ pinedMaps }),

  setTempPositionCreate: (position) => set({ tempPositionCreate: position }),
  setTempPositionEdit: (position) => set({ tempPositionEdit: position }),

  resetTempPositionCreate: () => set({ tempPositionCreate: null }),
  resetTempPositionEdit: () => set({ tempPositionEdit: null }),

  getDefaultCenter: () => DEFAULT_CENTER,

  isPinned: () => {
    const p = get().selectedPosition;
    if (!p || typeof p.lat !== 'number' || typeof p.lng !== 'number') return false;
    const isDefault =
      Math.abs(p.lat - DEFAULT_CENTER.lat) < 1e-6 &&
      Math.abs(p.lng - DEFAULT_CENTER.lng) < 1e-6;
    return !isDefault;
  },

  resetPin: () => set({
    selectedPosition: null,
    addressMaps: '',
    detailAddress: {},
    pinedMaps: false,
    tempPositionCreate: null,
    tempPositionEdit: null,
  }),
}));