Skip to content

Commit df22373

Browse files
authored
Update Search Index On Refactor (#436)
#436
1 parent 665fe15 commit df22373

23 files changed

+157
-135
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "mex-alpha",
33
"productName": "Mex Alpha",
4-
"version": "0.16.2-alpha.2",
4+
"version": "0.16.2-alpha.3",
55
"description": "Mex it to flex it",
66
"main": "dist/main.cjs",
77
"scripts": {

src/apis/useSaveApi.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { allNamespacesHierarchyParser } from '@workduck-io/mex-utils'
1818
import { defaultContent } from '../data/Defaults/baseData'
1919
import { DEFAULT_NAMESPACE, WORKSPACE_HEADER } from '../data/Defaults/defaults'
2020
import { USE_API } from '../data/Defaults/dev_'
21-
import { useLinks } from '../hooks/useLinks'
21+
import { getTitleFromPath, useLinks } from '../hooks/useLinks'
2222
import '../services/apiClient/apiClient'
2323
import { useAuthStore } from '../services/auth/useAuth'
2424
import { isRequestedWithin } from '../store/useApiStore'
@@ -95,7 +95,8 @@ export const useApi = () => {
9595
})
9696
.then((d) => {
9797
const metadata = extractMetadata(d.data)
98-
updateFromContent(noteId, d.data.data ?? options.content, metadata)
98+
const content = deserializeContent(d.data.data ?? options.content)
99+
updateFromContent(noteId, content, metadata)
99100
addLastOpened(noteId)
100101
return d.data
101102
})
@@ -646,7 +647,7 @@ export const useApi = () => {
646647
getDataAPI(ilink.nodeid, false, false, false).then((data) => {
647648
mog('toUpdateLocal', { ilink, data })
648649
setContent(ilink.nodeid, data.content, data.metadata)
649-
updateDocument('archive', ilink.nodeid, data.content)
650+
updateDocument('archive', ilink.nodeid, data.content, getTitleFromPath(ilink.path))
650651
})
651652
)
652653
).then(() => {

src/components/mex/Refactor/Refactor.tsx

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import React, { useEffect } from 'react'
44
import arrowRightLine from '@iconify/icons-ri/arrow-right-line'
55
import { Icon } from '@iconify/react'
66
import useDataStore from '@store/useDataStore'
7+
import useModalStore, { ModalsType } from '@store/useModalStore'
8+
import { useUserPreferenceStore } from '@store/userPreferenceStore'
79
import Modal from 'react-modal'
810
import create from 'zustand'
911

@@ -16,15 +18,12 @@ import { useRefactor } from '../../../hooks/useRefactor'
1618
import { useKeyListener } from '../../../hooks/useShortcutListener'
1719
import { useEditorStore } from '../../../store/useEditorStore'
1820
import { useHelpStore } from '../../../store/useHelpStore'
19-
import { useLayoutStore } from '../../../store/useLayoutStore'
2021
import { NodeLink } from '../../../types/relations'
2122
import { mog } from '../../../utils/lib/helper'
2223
import { isMatch, isReserved } from '../../../utils/lib/paths'
2324
import { QuickLink, WrappedNodeSelect } from '../NodeSelect/NodeSelect'
2425
import { doesLinkRemain } from './doesLinkRemain'
2526
import { ArrowIcon, MockRefactorMap, ModalControls, ModalHeader, MRMHead, MRMRow } from './styles'
26-
import { useUserPreferenceStore } from '@store/userPreferenceStore'
27-
import useModalStore, { ModalsType } from '@store/useModalStore'
2827
import { RefactorPath } from './types'
2928

3029
// Prefill modal has been added to the Tree via withRefactor from useRefactor

src/components/mex/Search/Search.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import { Title, TitleText } from '../../../style/Typography'
4343
import { GenericSearchResult, idxKey } from '../../../types/search'
4444
import { NodeType } from '../../../types/Types'
4545
import { SplitType } from '../../../ui/layout/splitView'
46-
import { getInitialNode } from '../../../utils/helpers'
46+
import { getInitialNode } from '@utils/initial'
4747
import { NavigationType, ROUTE_PATHS, useRouting } from '../../../views/routes/urls'
4848
import Backlinks from '../Backlinks'
4949
import Metadata from '../Metadata/Metadata'

src/components/mex/Sidebar/TreeItem.tsx

+13-8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import React, { useMemo } from 'react'
33
import { ItemId, RenderItemParams, TreeItem } from '@atlaskit/tree'
44
import { IS_DEV } from '@data/Defaults/dev_'
55
import { useLastOpened } from '@hooks/useLastOpened'
6+
import usePinnedWindows from '@hooks/usePinnedWindow'
67
import checkboxBlankCircleFill from '@iconify/icons-ri/checkbox-blank-circle-fill'
78
import fileList2Line from '@iconify/icons-ri/file-list-2-line'
89
// import { complexTree } from '../mockdata/complexTree'
@@ -31,7 +32,6 @@ import { MexIcon } from '@workduck-io/mex-components'
3132

3233
import { LastOpenedState } from '../../../types/userPreference'
3334
import { TreeContextMenu } from './TreeWithContextMenu'
34-
import usePinnedWindows from '@hooks/usePinnedWindow'
3535

3636
const defaultSnap = {
3737
isDragging: false,
@@ -71,8 +71,8 @@ const ItemTitleWithAnalysis = ({ item }: { item: TreeItem }) => {
7171
anal.nodeid && anal.nodeid === item.data.nodeid && anal.title !== undefined && anal.title !== ''
7272
? anal.title
7373
: item.data
74-
? item.data.title
75-
: 'NoTitle'
74+
? item.data.title
75+
: 'NoTitle'
7676

7777
return (
7878
<ItemTitle>
@@ -128,7 +128,6 @@ export const RenderTreeItem = ({
128128
onClick
129129
}: TreeItemProps) => {
130130
const isTrue = JSON.stringify(snapshot) !== JSON.stringify(defaultSnap)
131-
132131
const lastOpenedNote = useUserPreferenceStore((state) => state.lastOpenedNotes[item?.data?.nodeid])
133132
const { getLastOpened } = useLastOpened()
134133

@@ -141,20 +140,24 @@ export const RenderTreeItem = ({
141140
return lastOpenedState === LastOpenedState.UNREAD
142141
}, [lastOpenedState])
143142

143+
const isItemSelected = isInEditor && item.data && match?.params?.nodeid === item.data.nodeid
144+
144145
return (
145146
<Tippy theme="mex" placement="right" singleton={target} content={<TooltipContent item={item} />}>
146147
<span>
147148
<ContextMenu.Root
148149
onOpenChange={(open) => {
149150
if (open) {
150151
setContextOpenNodeId(item.data.nodeid)
151-
} else setContextOpenNodeId(null)
152+
} else {
153+
setContextOpenNodeId(null)
154+
}
152155
}}
153156
>
154157
<ContextMenu.Trigger asChild>
155158
<StyledTreeItem
156159
ref={provided.innerRef}
157-
selected={isInEditor && item.data && match?.params?.nodeid === item.data.nodeid}
160+
selected={isItemSelected}
158161
isDragging={snapshot.isDragging}
159162
hasMenuOpen={contextOpenNodeId === item.data.nodeid}
160163
isStub={item?.data?.stub}
@@ -183,11 +186,13 @@ export const RenderTreeItem = ({
183186
}
184187

185188
const TreeItemMetaInfo = ({ item, unRead }: { item: any; unRead: boolean }) => {
186-
const isPinned = useMultipleEditors(store => store.pinned?.has(item?.data?.nodeid))
189+
const isPinned = useMultipleEditors((store) => store.pinned?.has(item?.data?.nodeid))
187190
const { onUnpinNote } = usePinnedWindows()
188191

189192
if (isPinned) {
190-
return <MexIcon onClick={() => onUnpinNote(item?.data?.nodeid)} icon={PinIcon} width={16} height={16} color="white" />
193+
return (
194+
<MexIcon onClick={() => onUnpinNote(item?.data?.nodeid)} icon={PinIcon} width={16} height={16} color="white" />
195+
)
191196
}
192197

193198
return unRead ? (

src/components/spotlight/Content/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ const Content = () => {
143143
}
144144

145145
if (normalMode) getSearchItems()
146-
}, [search.value, actions, selection, activeItem.item, normalMode, pinned, ilinks, events])
146+
}, [search.value, actions, selection, activeItem.item, normalMode, recentResearchNodes, pinned, ilinks, events])
147147

148148
// * For setting the preview
149149
useEffect(() => {

src/components/spotlight/GlobalListener/index.tsx

+21-19
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,35 @@
1-
import { AppType, useInitialize } from '../../../hooks/useInitialize'
2-
import { NavigationType, ROUTE_PATHS, useRouting } from '../../../views/routes/urls'
31
import React, { memo, useEffect, useState } from 'react'
42

3+
// import { useActionsCache } from '../Actions/useActionsCache'
4+
import { useShareModalStore } from '@components/mex/Mention/ShareModalStore'
5+
import { useCreateNewNote } from '@hooks/useCreateNewNote'
6+
// import useDwindleAuthStore from '@workduck-io/dwindle/lib/esm/AuthStore/useAuthStore'
7+
import syncStores from '@store/syncStore/synced'
8+
import { getPlateSelectors } from '@udecode/plate'
9+
import { ipcRenderer } from 'electron'
10+
511
import { IpcAction } from '../../../data/IpcAction'
12+
import { useSaver } from '../../../editor/Components/Saver'
613
// import { appNotifierWindow } from '../../../electron/utils/notifiers'
714
import { getNewDraftKey } from '../../../editor/Components/SyncBlock/getNewBlockData'
8-
import { getPlateSelectors } from '@udecode/plate'
9-
import { ipcRenderer } from 'electron'
15+
import { useGoogleCalendarAutoFetch } from '../../../hooks/useCalendar'
16+
import { AppType, useInitialize } from '../../../hooks/useInitialize'
1017
import useAnalytics from '../../../services/analytics'
1118
import { useAuthStore } from '../../../services/auth/useAuth'
12-
import useDataStore from '../../../store/useDataStore'
13-
// import useOnboard from '../../../store/useOnboarding'
14-
import { useRecentsStore } from '../../../store/useRecentsStore'
15-
import { useSaver } from '../../../editor/Components/Saver'
16-
import { useSpotlightAppStore } from '../../../store/app.spotlight'
1719
import { useSpotlightContext } from '../../../store/Context/context.spotlight'
20+
import { useSpotlightAppStore } from '../../../store/app.spotlight'
1821
import { useSpotlightEditorStore } from '../../../store/editor.spotlight'
1922
import { useSpotlightSettingsStore } from '../../../store/settings.spotlight'
20-
import ReminderArmer from '../Reminder/ReminderArmer'
21-
import { useGoogleCalendarAutoFetch } from '../../../hooks/useCalendar'
23+
import useDataStore from '../../../store/useDataStore'
24+
// import useOnboard from '../../../store/useOnboarding'
25+
import { useRecentsStore } from '../../../store/useRecentsStore'
26+
import { NavigationType, ROUTE_PATHS, useRouting } from '../../../views/routes/urls'
27+
import { useActionsPerfomerClient } from '../Actions/useActionPerformer'
2228
// import { useMentionData, useTokenData } from '../../../hooks/useLocalData'
2329
// import { useRecieveMentions, useRecieveTokens } from '../../../hooks/useSyncData'
2430
import { useActionStore } from '../Actions/useActionStore'
25-
import { useActionsPerfomerClient } from '../Actions/useActionPerformer'
26-
// import { useActionsCache } from '../Actions/useActionsCache'
27-
import { useShareModalStore } from '@components/mex/Mention/ShareModalStore'
28-
import { useCreateNewNote } from '@hooks/useCreateNewNote'
29-
// import useDwindleAuthStore from '@workduck-io/dwindle/lib/esm/AuthStore/useAuthStore'
30-
import syncStores from '@store/syncStore/synced'
31+
import ReminderArmer from '../Reminder/ReminderArmer'
32+
import { useSaveChanges } from '../Search/useSearchProps'
3133

3234
const GlobalListener = memo(() => {
3335
const [temp, setTemp] = useState<any>()
@@ -50,7 +52,7 @@ const GlobalListener = memo(() => {
5052
// const { getTokenData } = useTokenData()
5153
// const { initActionsInStore, initActionsOfGroup } = useActions()
5254
// const { setReceiveToken } = useRecieveTokens()
53-
const { onSave } = useSaver()
55+
const { saveIt } = useSaveChanges()
5456
const { init } = useInitialize()
5557
const { identifyUser } = useAnalytics()
5658
const { initActionPerfomerClient } = useActionsPerfomerClient()
@@ -127,7 +129,7 @@ const GlobalListener = memo(() => {
127129

128130
addRecent(node.nodeid)
129131
addInRecentResearchNodes(node.nodeid)
130-
if (saveAfterBlur) onSave(node, true, false, content)
132+
if (saveAfterBlur) saveIt({ saveAndClose: false, skipPathCheck: true, notify: false })
131133
else setSaveAfterBlur(true)
132134
// appNotifierWindow(IpcAction.NEW_RECENT_ITEM, AppType.SPOTLIGHT, { nodeid: node.nodeid })
133135
setReset()

src/components/spotlight/Home/useSearch.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ export const useSearch = () => {
101101
)
102102

103103
searchList = isNew ? [CREATE_NEW_ITEM, ...results] : results
104-
}
105-
else {
104+
} else {
106105
searchList = quickLinks
107106
}
108107
break
@@ -122,6 +121,8 @@ export const useSearch = () => {
122121
const nodeItems = await queryIndex(['node'], search.value)
123122
const snippetItems = await queryIndex(['snippet', 'template'], search.value)
124123

124+
mog('Node Items', { nodeItems })
125+
125126
const actionItems = getSearchResults(search.value, actions, { keySelector: (obj) => obj.title })
126127
const localNodes = []
127128

src/components/spotlight/Search/index.tsx

+18-22
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
1-
import { CategoryType, useSpotlightContext } from '../../../store/Context/context.spotlight'
21
/* eslint-disable react/prop-types */
32
import React, { useEffect, useRef } from 'react'
4-
import { StyledInput, StyledSearch } from './styled'
5-
import { useSaveChanges, useSearchProps } from './useSearchProps'
63

7-
import { CenterIcon } from '../../../style/spotlight/layout'
8-
import Message from '../Message'
9-
import { useContentStore } from '../../../store/useContentStore'
4+
import NamespaceTag from '@components/mex/NamespaceTag'
5+
import { useNamespaces } from '@hooks/useNamespaces'
6+
import { useSpotlightEditorStore } from '@store/editor.spotlight'
7+
import useDataStore from '@store/useDataStore'
8+
import { StyledCreatatbleSelect } from '@style/Form'
9+
import { StyledNamespaceSpotlightSelectComponents } from '@style/Select'
10+
import { useTheme } from 'styled-components'
1011
import { useDebouncedCallback } from 'use-debounce'
12+
13+
import { mog } from '@workduck-io/mex-utils'
14+
15+
import { CategoryType, useSpotlightContext } from '../../../store/Context/context.spotlight'
1116
import { useSpotlightAppStore } from '../../../store/app.spotlight'
12-
import { useTheme } from 'styled-components'
17+
import { useContentStore } from '../../../store/useContentStore'
18+
import { CenterIcon } from '../../../style/spotlight/layout'
1319
import { withoutContinuousDelimiter } from '../../../utils/lib/helper'
1420
import { useRouting } from '../../../views/routes/urls'
15-
import ViewActionHandler from '../ActionStage/Forms/ViewActionHandler'
16-
import { useActionStore } from '../Actions/useActionStore'
1721
import { useActionMenuStore } from '../ActionStage/ActionMenu/useActionMenuStore'
22+
import ViewActionHandler from '../ActionStage/Forms/ViewActionHandler'
1823
import { getIconType, ProjectIconMex } from '../ActionStage/Project/ProjectIcon'
19-
import { StyledCreatatbleSelect } from '@style/Form'
20-
import useDataStore from '@store/useDataStore'
21-
import { useNamespaces } from '@hooks/useNamespaces'
22-
import { mog } from '@workduck-io/mex-utils'
23-
import { StyledNamespaceSpotlightSelectComponents } from '@style/Select'
24-
import NamespaceTag from '@components/mex/NamespaceTag'
25-
import { useSpotlightEditorStore } from '@store/editor.spotlight'
24+
import { useActionStore } from '../Actions/useActionStore'
25+
import Message from '../Message'
26+
import { StyledInput, StyledSearch } from './styled'
27+
import { useSaveChanges, useSearchProps } from './useSearchProps'
2628

2729
type QueryType = {
2830
value: string
@@ -129,12 +131,6 @@ const Search = () => {
129131
}
130132
}
131133

132-
mog('spotlight', {
133-
input,
134-
placeholder,
135-
editorNode
136-
})
137-
138134
return (
139135
<StyledSearch id="wd-mex-spotlight-search-container">
140136
<CenterIcon id="wd-mex-search-left-icon" pointer={!normalMode} onClick={onBackClick}>

src/components/spotlight/Search/useSearchProps.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { SEPARATOR } from '@components/mex/Sidebar/treeUtils'
22
import { defaultContent } from '@data/Defaults/baseData'
33
import { getBlockMetadata } from '@editor/Actions/useEditorBlockSelection'
44
import { getLatestContent } from '@hooks/useEditorBuffer'
5+
import { getTitleFromPath } from '@hooks/useLinks'
56
import { getPlateSelectors } from '@udecode/plate'
67
import { convertValueToTasks } from '@utils/lib/contentConvertTask'
78

@@ -56,6 +57,7 @@ type SaveItProps = {
5657
isNewTask?: boolean
5758
path?: string
5859
notify?: boolean
60+
skipPathCheck?: boolean
5961
// Will not save on blur if false
6062
// defaults to true if absent
6163
saveAfterBlur?: boolean
@@ -113,7 +115,7 @@ export const useSaveChanges = () => {
113115
let path = node.path
114116
const title = getTitleFromContent(editorContent)
115117

116-
if (isNewDraftNode && isUntitledDraftNode) {
118+
if (isNewDraftNode && isUntitledDraftNode && !options?.skipPathCheck) {
117119
if (options?.beforeSave) {
118120
path = path.split(SEPARATOR).slice(0, -1).join(SEPARATOR) + `${SEPARATOR}${title}`
119121
} else {
@@ -140,7 +142,7 @@ export const useSaveChanges = () => {
140142
})
141143
}
142144

143-
await updateDocument('node', node.nodeid, editorContent)
145+
await updateDocument('node', node.nodeid, editorContent, getTitleFromPath(path))
144146

145147
setSearch({ value: '', type: CategoryType.search })
146148
setInput('')

0 commit comments

Comments
 (0)