poi-plugin-quest-info-2 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/build/kcQuestsData/DATA_VERSION +1 -1
- package/build/kcQuestsData/index.ts +1 -1
- package/package.json +1 -1
- package/src/Toolbar.tsx +6 -6
- package/src/__tests__/kcwikiData.spec.ts +1 -1
- package/src/components/QuestCard.tsx +7 -7
- package/src/components/QuestList.tsx +27 -9
- package/src/poi/hooks.ts +2 -2
- package/src/poi/types.ts +7 -4
- package/src/questHelper.ts +26 -22
- package/src/store/quest.ts +20 -27
- package/src/tags.ts +14 -8
package/README.md
CHANGED
|
@@ -5,14 +5,29 @@
|
|
|
5
5
|
|
|
6
6
|
A [poi](https://github.com/poooi/poi) plugin that helps you view quest info. Data maintained by [kcanotify-gamedata](https://github.com/antest1/kcanotify-gamedata) & [kc3-translations](https://github.com/KC3Kai/kc3-translations) & [kcQuests](https://github.com/kcwikizh/kcQuests).
|
|
7
7
|
|
|
8
|
+

|
|
9
|
+
|
|
8
10
|
## Installation
|
|
9
11
|
|
|
10
12
|
Paste `poi-plugin-quest-info-2` in the plugins tab and click the install button.
|
|
11
13
|
|
|
14
|
+
## Features
|
|
15
|
+
|
|
16
|
+
- Translated quest info.(English/Simplified Chinese/Traditional Chinese/Korean)
|
|
17
|
+
- Task panel translation.
|
|
18
|
+
- Quest search and filter.
|
|
19
|
+
- Sync with game quest data.
|
|
20
|
+
- Auto switch to quest tab when enter quest views.
|
|
21
|
+
|
|
12
22
|
## Thanks
|
|
13
23
|
|
|
14
24
|
- [poi](https://github.com/poooi/poi)
|
|
15
|
-
- [kcanotify-gamedata](https://github.com/antest1/kcanotify-gamedata)
|
|
16
|
-
- [poi-plugin-tabex](https://github.com/momocow/poi-plugin-tabex)
|
|
17
25
|
- [plugin-quest](https://github.com/poooi/plugin-quest)
|
|
26
|
+
- [kcanotify-gamedata](https://github.com/antest1/kcanotify-gamedata)
|
|
18
27
|
- [kcQuests](https://github.com/kcwikizh/kcQuests)
|
|
28
|
+
- [舰娘百科](https://zh.kcwiki.cn/wiki/%E8%88%B0%E5%A8%98%E7%99%BE%E7%A7%91)
|
|
29
|
+
- [poi-plugin-tabex](https://github.com/momocow/poi-plugin-tabex)
|
|
30
|
+
|
|
31
|
+
## License
|
|
32
|
+
|
|
33
|
+
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
004638c4fa18cf4d37e45f3a8704bffe7cdaa49e
|
package/package.json
CHANGED
package/src/Toolbar.tsx
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
CATEGORY_TAGS,
|
|
13
13
|
ALL_TAGS,
|
|
14
14
|
} from './tags'
|
|
15
|
-
import type {
|
|
15
|
+
import type { UnionQuest } from './questHelper'
|
|
16
16
|
import { usePluginTranslation } from './poi/hooks'
|
|
17
17
|
import { IN_POI } from './poi/env'
|
|
18
18
|
|
|
@@ -158,10 +158,10 @@ const useToolbarFilter = () => {
|
|
|
158
158
|
.map((i) => i.toUpperCase())
|
|
159
159
|
|
|
160
160
|
const stringFilter = useCallback(
|
|
161
|
-
(quest:
|
|
162
|
-
const text = `${quest.code} ${quest.name} ${
|
|
163
|
-
quest.
|
|
164
|
-
}`
|
|
161
|
+
(quest: UnionQuest) => {
|
|
162
|
+
const text = `${quest.docQuest.code} ${quest.docQuest.name} ${
|
|
163
|
+
quest.docQuest.desc
|
|
164
|
+
} ${quest.docQuest.memo ?? ''}`
|
|
165
165
|
if (!searchKeywords) {
|
|
166
166
|
return true
|
|
167
167
|
}
|
|
@@ -173,7 +173,7 @@ const useToolbarFilter = () => {
|
|
|
173
173
|
)
|
|
174
174
|
|
|
175
175
|
const toolbarFilter = useCallback(
|
|
176
|
-
(quest:
|
|
176
|
+
(quest: UnionQuest) => {
|
|
177
177
|
return [...tagsFilter, stringFilter].every((filter) => filter(quest))
|
|
178
178
|
},
|
|
179
179
|
[stringFilter, tagsFilter]
|
|
@@ -2,7 +2,7 @@ import { version, KcwikiQuestData } from '../../build/kcQuestsData'
|
|
|
2
2
|
|
|
3
3
|
test('should KcwikiQuestData Game data version correct', () => {
|
|
4
4
|
expect(version).toMatchInlineSnapshot(
|
|
5
|
-
`"
|
|
5
|
+
`"004638c4fa18cf4d37e45f3a8704bffe7cdaa49e"`
|
|
6
6
|
)
|
|
7
7
|
})
|
|
8
8
|
|
|
@@ -75,7 +75,7 @@ const questIconMap = {
|
|
|
75
75
|
} as const
|
|
76
76
|
|
|
77
77
|
const questStatusMap: Record<QUEST_STATUS, React.FC> = {
|
|
78
|
-
[QUEST_STATUS.
|
|
78
|
+
[QUEST_STATUS.LOCKED]: function Locked() {
|
|
79
79
|
const { t } = usePluginTranslation()
|
|
80
80
|
return (
|
|
81
81
|
<Tooltip content={t('Locked')}>
|
|
@@ -84,8 +84,8 @@ const questStatusMap: Record<QUEST_STATUS, React.FC> = {
|
|
|
84
84
|
)
|
|
85
85
|
},
|
|
86
86
|
// Display nothing
|
|
87
|
-
[QUEST_STATUS.
|
|
88
|
-
[QUEST_STATUS.
|
|
87
|
+
[QUEST_STATUS.DEFAULT]: () => null,
|
|
88
|
+
[QUEST_STATUS.IN_PROGRESS]: function InProgress() {
|
|
89
89
|
const { t } = usePluginTranslation()
|
|
90
90
|
return (
|
|
91
91
|
<Tooltip content={t('In Progress')}>
|
|
@@ -93,7 +93,7 @@ const questStatusMap: Record<QUEST_STATUS, React.FC> = {
|
|
|
93
93
|
</Tooltip>
|
|
94
94
|
)
|
|
95
95
|
},
|
|
96
|
-
[QUEST_STATUS.
|
|
96
|
+
[QUEST_STATUS.COMPLETED]: function Completed() {
|
|
97
97
|
const { t } = usePluginTranslation()
|
|
98
98
|
return (
|
|
99
99
|
<Tooltip content={t('Completed')}>
|
|
@@ -101,7 +101,7 @@ const questStatusMap: Record<QUEST_STATUS, React.FC> = {
|
|
|
101
101
|
</Tooltip>
|
|
102
102
|
)
|
|
103
103
|
},
|
|
104
|
-
[QUEST_STATUS.
|
|
104
|
+
[QUEST_STATUS.ALREADY_COMPLETED]: function AlreadyCompleted() {
|
|
105
105
|
const { t } = usePluginTranslation()
|
|
106
106
|
return (
|
|
107
107
|
<Tooltip content={t('Already Completed')}>
|
|
@@ -126,7 +126,7 @@ export const LargeQuestCard: React.FC<QuestCardProps> = ({
|
|
|
126
126
|
name,
|
|
127
127
|
desc,
|
|
128
128
|
tips,
|
|
129
|
-
status = QUEST_STATUS.
|
|
129
|
+
status = QUEST_STATUS.DEFAULT,
|
|
130
130
|
onClick,
|
|
131
131
|
style,
|
|
132
132
|
}) => {
|
|
@@ -159,7 +159,7 @@ export const MinimalQuestCard: React.FC<QuestCardProps> = ({
|
|
|
159
159
|
name,
|
|
160
160
|
desc,
|
|
161
161
|
tips,
|
|
162
|
-
status = QUEST_STATUS.
|
|
162
|
+
status = QUEST_STATUS.DEFAULT,
|
|
163
163
|
onClick,
|
|
164
164
|
style,
|
|
165
165
|
}) => {
|
|
@@ -9,10 +9,12 @@ import {
|
|
|
9
9
|
} from 'react-virtualized'
|
|
10
10
|
import type { ListRowProps } from 'react-virtualized'
|
|
11
11
|
import styled from 'styled-components'
|
|
12
|
-
import {
|
|
12
|
+
import { QUEST_STATUS } from '../questHelper'
|
|
13
|
+
import type { UnionQuest } from '../questHelper'
|
|
13
14
|
import { useLargeCard } from '../store'
|
|
14
15
|
import { QuestCard } from './QuestCard'
|
|
15
16
|
import { useIsQuestPluginTab } from '../poi/hooks'
|
|
17
|
+
import { QUEST_API_STATE } from '../poi/types'
|
|
16
18
|
|
|
17
19
|
const QuestListWrapper = styled.div`
|
|
18
20
|
flex: 1;
|
|
@@ -25,10 +27,29 @@ const cache = new CellMeasurerCache({
|
|
|
25
27
|
fixedWidth: true,
|
|
26
28
|
})
|
|
27
29
|
|
|
28
|
-
const
|
|
30
|
+
const questStateToQuestStatus = (
|
|
31
|
+
state: QUEST_API_STATE | undefined
|
|
32
|
+
): QUEST_STATUS => {
|
|
33
|
+
switch (state) {
|
|
34
|
+
case QUEST_API_STATE.DEFAULT:
|
|
35
|
+
return QUEST_STATUS.DEFAULT
|
|
36
|
+
case QUEST_API_STATE.COMPLETED:
|
|
37
|
+
return QUEST_STATUS.COMPLETED
|
|
38
|
+
case QUEST_API_STATE.IN_PROGRESS:
|
|
39
|
+
return QUEST_STATUS.IN_PROGRESS
|
|
40
|
+
default:
|
|
41
|
+
return QUEST_STATUS.DEFAULT
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const useQuestsRowRenderer = (quests: UnionQuest[]) => {
|
|
29
46
|
const rowRenderer = useCallback(
|
|
30
47
|
({ key, index, style, parent }: ListRowProps) => {
|
|
31
|
-
const
|
|
48
|
+
const quest = quests[index]
|
|
49
|
+
const { gameId } = quest
|
|
50
|
+
const { code, name, desc, memo } = quest.docQuest
|
|
51
|
+
const questStatus = questStateToQuestStatus(quest.gameQuest?.api_state)
|
|
52
|
+
|
|
32
53
|
return (
|
|
33
54
|
<CellMeasurer
|
|
34
55
|
cache={cache}
|
|
@@ -45,7 +66,7 @@ const useQuestsRowRenderer = (quests: KcanotifyQuestExt[]) => {
|
|
|
45
66
|
name={name}
|
|
46
67
|
desc={desc}
|
|
47
68
|
tips={memo}
|
|
48
|
-
status={
|
|
69
|
+
status={questStatus}
|
|
49
70
|
></QuestCard>
|
|
50
71
|
</div>
|
|
51
72
|
</CellMeasurer>
|
|
@@ -56,12 +77,11 @@ const useQuestsRowRenderer = (quests: KcanotifyQuestExt[]) => {
|
|
|
56
77
|
return rowRenderer
|
|
57
78
|
}
|
|
58
79
|
|
|
59
|
-
export const QuestList: React.FC<{ quests:
|
|
60
|
-
quests,
|
|
61
|
-
}) => {
|
|
80
|
+
export const QuestList: React.FC<{ quests: UnionQuest[] }> = ({ quests }) => {
|
|
62
81
|
const { largeCard } = useLargeCard()
|
|
63
82
|
const activeTab = useIsQuestPluginTab()
|
|
64
83
|
const listRef = useRef<List>(null)
|
|
84
|
+
const rowRenderer: ListRowRenderer = useQuestsRowRenderer(quests)
|
|
65
85
|
|
|
66
86
|
useEffect(() => {
|
|
67
87
|
const largeCardIdx = quests.findIndex((i) => i.gameId === largeCard)
|
|
@@ -81,8 +101,6 @@ export const QuestList: React.FC<{ quests: KcanotifyQuestExt[] }> = ({
|
|
|
81
101
|
listRef.current?.recomputeRowHeights()
|
|
82
102
|
}, [])
|
|
83
103
|
|
|
84
|
-
const rowRenderer: ListRowRenderer = useQuestsRowRenderer(quests)
|
|
85
|
-
|
|
86
104
|
if (!quests.length) {
|
|
87
105
|
// Prevent Uncaught Error: Requested index 0 is outside of range 0..0
|
|
88
106
|
// See https://github.com/bvaughn/react-virtualized/issues/1016
|
package/src/poi/hooks.ts
CHANGED
|
@@ -25,9 +25,9 @@ export const usePluginTranslation = () => {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export const useGameQuest = () => {
|
|
28
|
-
const [quests, setQuests] = useState<GameQuest[]
|
|
28
|
+
const [quests, setQuests] = useState<GameQuest[]>([])
|
|
29
29
|
useEffect(() => {
|
|
30
|
-
const listener = (quests: GameQuest[] | null) => setQuests(quests)
|
|
30
|
+
const listener = (quests: GameQuest[] | null) => setQuests(quests ?? [])
|
|
31
31
|
// See reducer.ts
|
|
32
32
|
return observePluginStore(listener, (i) => i?._?.questList)
|
|
33
33
|
}, [])
|
package/src/poi/types.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { PluginState } from '../reducer'
|
|
2
2
|
|
|
3
|
+
export enum QUEST_API_STATE {
|
|
4
|
+
DEFAULT = 1,
|
|
5
|
+
IN_PROGRESS = 2,
|
|
6
|
+
COMPLETED = 3,
|
|
7
|
+
}
|
|
8
|
+
|
|
3
9
|
// See https://github.com/poooi/poi/blob/master/views/redux/info/quests.es
|
|
4
10
|
export type GameQuest = {
|
|
5
|
-
|
|
6
|
-
// 2 In progress
|
|
7
|
-
// 3 Completed
|
|
8
|
-
api_state: 1 | 2 | 3
|
|
11
|
+
api_state: QUEST_API_STATE
|
|
9
12
|
api_no: number
|
|
10
13
|
api_title: string
|
|
11
14
|
api_detail: string
|
package/src/questHelper.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { QuestData } from '../build/kcanotifyGamedata'
|
|
2
|
+
import { GameQuest, QUEST_API_STATE } from './poi/types'
|
|
2
3
|
|
|
3
|
-
type
|
|
4
|
+
type DocQuest = {
|
|
4
5
|
code: string
|
|
5
6
|
name: string
|
|
6
7
|
desc: string
|
|
@@ -9,9 +10,10 @@ type KcanotifyQuest = {
|
|
|
9
10
|
tracking?: number[][]
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
export type
|
|
13
|
+
export type UnionQuest = {
|
|
13
14
|
gameId: string
|
|
14
|
-
|
|
15
|
+
gameQuest?: GameQuest
|
|
16
|
+
docQuest: DocQuest
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
const questStartsFilter = (str: string) =>
|
|
@@ -26,16 +28,18 @@ export const quarterlyQuest = questStartsFilter('(季任)')
|
|
|
26
28
|
// (年任) (年任 / x 月)
|
|
27
29
|
export const yearlyQuest = questStartsFilter('(年任')
|
|
28
30
|
|
|
29
|
-
export const isInProgressQuest = (quest:
|
|
30
|
-
|
|
31
|
+
export const isInProgressQuest = (quest: UnionQuest) =>
|
|
32
|
+
quest.gameQuest?.api_state === QUEST_API_STATE.IN_PROGRESS ||
|
|
33
|
+
quest.gameQuest?.api_state === QUEST_API_STATE.COMPLETED
|
|
34
|
+
export const isDailyQuest = (quest: UnionQuest) =>
|
|
31
35
|
dailyQuest.includes(quest.gameId)
|
|
32
|
-
export const isWeeklyQuest = (quest:
|
|
36
|
+
export const isWeeklyQuest = (quest: UnionQuest) =>
|
|
33
37
|
weeklyQuest.includes(quest.gameId)
|
|
34
|
-
export const isMonthlyQuest = (quest:
|
|
38
|
+
export const isMonthlyQuest = (quest: UnionQuest) =>
|
|
35
39
|
monthlyQuest.includes(quest.gameId)
|
|
36
|
-
export const isQuarterlyQuest = (quest:
|
|
40
|
+
export const isQuarterlyQuest = (quest: UnionQuest) =>
|
|
37
41
|
quarterlyQuest.includes(quest.gameId)
|
|
38
|
-
export const isYearlyQuest = (quest:
|
|
42
|
+
export const isYearlyQuest = (quest: UnionQuest) =>
|
|
39
43
|
yearlyQuest.includes(quest.gameId)
|
|
40
44
|
|
|
41
45
|
export enum QUEST_CATEGORY {
|
|
@@ -154,28 +158,28 @@ export const guessQuestCategory = (
|
|
|
154
158
|
}
|
|
155
159
|
}
|
|
156
160
|
|
|
157
|
-
export const isCompositionQuest = ({ code }:
|
|
161
|
+
export const isCompositionQuest = ({ code }: DocQuest) =>
|
|
158
162
|
guessQuestCategory(code).type === QUEST_CATEGORY.Composition
|
|
159
|
-
export const isSortieQuest = ({ code }:
|
|
163
|
+
export const isSortieQuest = ({ code }: DocQuest) =>
|
|
160
164
|
guessQuestCategory(code).type === QUEST_CATEGORY.Sortie
|
|
161
|
-
export const isExerciseQuest = ({ code }:
|
|
165
|
+
export const isExerciseQuest = ({ code }: DocQuest) =>
|
|
162
166
|
guessQuestCategory(code).type === QUEST_CATEGORY.Exercise
|
|
163
|
-
export const isExpeditionQuest = ({ code }:
|
|
167
|
+
export const isExpeditionQuest = ({ code }: DocQuest) =>
|
|
164
168
|
guessQuestCategory(code).type === QUEST_CATEGORY.Expedition
|
|
165
|
-
export const isSupplyOrDockingQuest = ({ code }:
|
|
169
|
+
export const isSupplyOrDockingQuest = ({ code }: DocQuest) =>
|
|
166
170
|
guessQuestCategory(code).type === QUEST_CATEGORY.SupplyOrDocking
|
|
167
|
-
export const isArsenalQuest = ({ code }:
|
|
171
|
+
export const isArsenalQuest = ({ code }: DocQuest) =>
|
|
168
172
|
guessQuestCategory(code).type === QUEST_CATEGORY.Arsenal
|
|
169
|
-
export const isModernizationQuest = ({ code }:
|
|
173
|
+
export const isModernizationQuest = ({ code }: DocQuest) =>
|
|
170
174
|
guessQuestCategory(code).type === QUEST_CATEGORY.Modernization
|
|
171
|
-
export const isUnknownCategoryQuest = ({ code }:
|
|
175
|
+
export const isUnknownCategoryQuest = ({ code }: DocQuest) =>
|
|
172
176
|
// Starts with unknown character
|
|
173
177
|
/^[^ABCDEFG]/.test(code)
|
|
174
178
|
|
|
175
179
|
export enum QUEST_STATUS {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
LOCKED,
|
|
181
|
+
DEFAULT,
|
|
182
|
+
IN_PROGRESS,
|
|
183
|
+
COMPLETED,
|
|
184
|
+
ALREADY_COMPLETED,
|
|
181
185
|
}
|
package/src/store/quest.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { useCallback } from 'react'
|
|
2
|
-
import { checkIsKcwikiSupportedLanguages } from '.'
|
|
3
2
|
import { QuestData } from '../../build/kcanotifyGamedata'
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
} from '../poi/hooks'
|
|
9
|
-
import { getCategory, KcanotifyQuestExt } from '../questHelper'
|
|
10
|
-
import { useKcwikiData } from './kcwiki'
|
|
3
|
+
import { useGameQuest, usePluginTranslation } from '../poi/hooks'
|
|
4
|
+
import { getCategory } from '../questHelper'
|
|
5
|
+
import type { UnionQuest } from '../questHelper'
|
|
6
|
+
import { useKcwikiData, checkIsKcwikiSupportedLanguages } from './kcwiki'
|
|
11
7
|
import { useStore } from './store'
|
|
12
8
|
|
|
13
9
|
const DEFAULT_LANG = 'ja-JP'
|
|
@@ -41,27 +37,21 @@ const useQuestMap = () => {
|
|
|
41
37
|
return QuestData[lang]
|
|
42
38
|
}
|
|
43
39
|
|
|
44
|
-
export const useQuest = ():
|
|
45
|
-
const
|
|
46
|
-
const questMap = useQuestMap()
|
|
40
|
+
export const useQuest = (): UnionQuest[] => {
|
|
41
|
+
const docQuestMap = useQuestMap()
|
|
47
42
|
const gameQuest = useGameQuest()
|
|
48
43
|
const {
|
|
49
44
|
store: { syncWithGame },
|
|
50
45
|
} = useStore()
|
|
51
46
|
|
|
52
|
-
if (syncWithGame) {
|
|
53
|
-
if (gameQuest == null) {
|
|
54
|
-
// TODO tip use to sync quest data
|
|
55
|
-
return []
|
|
56
|
-
}
|
|
47
|
+
if (syncWithGame && gameQuest.length) {
|
|
57
48
|
return gameQuest.map((quest) => {
|
|
58
49
|
const gameId = String(quest.api_no)
|
|
59
|
-
|
|
60
|
-
if (gameId in questMap) {
|
|
50
|
+
if (gameId in docQuestMap) {
|
|
61
51
|
return {
|
|
62
52
|
gameId,
|
|
63
|
-
|
|
64
|
-
|
|
53
|
+
gameQuest: quest,
|
|
54
|
+
docQuest: docQuestMap[gameId as keyof typeof docQuestMap],
|
|
65
55
|
}
|
|
66
56
|
}
|
|
67
57
|
|
|
@@ -69,18 +59,21 @@ export const useQuest = (): KcanotifyQuestExt[] => {
|
|
|
69
59
|
// May be a new quest
|
|
70
60
|
return {
|
|
71
61
|
gameId,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
62
|
+
gameQuest: quest,
|
|
63
|
+
docQuest: {
|
|
64
|
+
code: `${getCategory(quest.api_category).wikiSymbol}?`,
|
|
65
|
+
name: quest.api_title,
|
|
66
|
+
desc: quest.api_detail,
|
|
67
|
+
},
|
|
76
68
|
}
|
|
77
69
|
})
|
|
78
70
|
} else {
|
|
79
71
|
// Return all recorded quests
|
|
80
|
-
return Object.entries(
|
|
72
|
+
return Object.entries(docQuestMap).map(([gameId, val]) => ({
|
|
81
73
|
gameId,
|
|
82
|
-
|
|
83
|
-
|
|
74
|
+
// Maybe empty
|
|
75
|
+
gameQuest: gameQuest.find((quest) => quest.api_no === Number(gameId))!,
|
|
76
|
+
docQuest: val,
|
|
84
77
|
}))
|
|
85
78
|
}
|
|
86
79
|
}
|
package/src/tags.ts
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
isUnknownCategoryQuest,
|
|
16
16
|
isInProgressQuest,
|
|
17
17
|
} from './questHelper'
|
|
18
|
+
import type { UnionQuest } from './questHelper'
|
|
18
19
|
|
|
19
20
|
const yes = () => true as const
|
|
20
21
|
|
|
@@ -25,16 +26,21 @@ export const ALL_CATEGORY_TAG = {
|
|
|
25
26
|
|
|
26
27
|
export const ALL_TYPE_TAG = ALL_CATEGORY_TAG
|
|
27
28
|
|
|
29
|
+
const withDocQuest =
|
|
30
|
+
(filterFn: (q: UnionQuest['docQuest']) => boolean) =>
|
|
31
|
+
(unionQuest: UnionQuest) =>
|
|
32
|
+
filterFn(unionQuest.docQuest)
|
|
33
|
+
|
|
28
34
|
export const CATEGORY_TAGS = [
|
|
29
35
|
ALL_CATEGORY_TAG,
|
|
30
|
-
{ name: 'Composition', filter: isCompositionQuest },
|
|
31
|
-
{ name: 'Sortie', filter: isSortieQuest },
|
|
32
|
-
{ name: 'Exercise', filter: isExerciseQuest },
|
|
33
|
-
{ name: 'Expedition', filter: isExpeditionQuest },
|
|
34
|
-
{ name: 'Supply / Docking', filter: isSupplyOrDockingQuest },
|
|
35
|
-
{ name: 'Arsenal', filter: isArsenalQuest },
|
|
36
|
-
{ name: 'Modernization', filter: isModernizationQuest },
|
|
37
|
-
{ name: 'Others', filter: isUnknownCategoryQuest },
|
|
36
|
+
{ name: 'Composition', filter: withDocQuest(isCompositionQuest) },
|
|
37
|
+
{ name: 'Sortie', filter: withDocQuest(isSortieQuest) },
|
|
38
|
+
{ name: 'Exercise', filter: withDocQuest(isExerciseQuest) },
|
|
39
|
+
{ name: 'Expedition', filter: withDocQuest(isExpeditionQuest) },
|
|
40
|
+
{ name: 'Supply / Docking', filter: withDocQuest(isSupplyOrDockingQuest) },
|
|
41
|
+
{ name: 'Arsenal', filter: withDocQuest(isArsenalQuest) },
|
|
42
|
+
{ name: 'Modernization', filter: withDocQuest(isModernizationQuest) },
|
|
43
|
+
{ name: 'Others', filter: withDocQuest(isUnknownCategoryQuest) },
|
|
38
44
|
] as const
|
|
39
45
|
|
|
40
46
|
export const TYPE_TAGS = [
|