1
0
mirror of https://github.com/BoostIo/Boostnote synced 2026-02-12 15:31:41 +00:00

When storage or folder is removed, Detail components should render without error (#3168)

* optimize: when storage or folder is removed, Detail components should render without error, fix #2876

* optimize: Handle some scenarios where storage is not found, should not break the renderer

* optimize: NoteList should work without error when storage is not found
This commit is contained in:
hikerpig
2020-04-06 17:02:52 +08:00
committed by GitHub
parent 0d797ce8a8
commit 6ee92588b1
7 changed files with 69 additions and 24 deletions

View File

@@ -294,7 +294,7 @@ class FolderSelect extends React.Component {
{optionList}
</div>
</div>
) : (
) : currentOption ? (
<div styleName='idle' style={{ color: currentOption.folder.color }}>
<div styleName='idle-label'>
<i className='fa fa-folder' />
@@ -303,7 +303,7 @@ class FolderSelect extends React.Component {
</span>
</div>
</div>
)}
) : null}
</div>
)
}

View File

@@ -479,10 +479,16 @@ class MarkdownNoteDetail extends React.Component {
})
})
})
const currentOption = options.filter(
const currentOption = _.find(
options,
option =>
option.storage.key === storageKey && option.folder.key === folderKey
)[0]
)
// currentOption may be undefined
const storageName = _.get(currentOption, 'storage.name') || ''
const folderName = _.get(currentOption, 'folder.name') || ''
const trashTopBar = (
<div styleName='info'>
@@ -495,8 +501,8 @@ class MarkdownNoteDetail extends React.Component {
/>
<InfoButton onClick={e => this.handleInfoButtonClick(e)} />
<InfoPanelTrashed
storageName={currentOption.storage.name}
folderName={currentOption.folder.name}
storageName={storageName}
folderName={folderName}
updatedAt={formatDate(note.updatedAt)}
createdAt={formatDate(note.createdAt)}
exportAsHtml={this.exportAsHtml}
@@ -579,8 +585,8 @@ class MarkdownNoteDetail extends React.Component {
<InfoButton onClick={e => this.handleInfoButtonClick(e)} />
<InfoPanel
storageName={currentOption.storage.name}
folderName={currentOption.folder.name}
storageName={storageName}
folderName={folderName}
noteLink={`[${note.title}](:note:${
queryString.parse(location.search).key
})`}

View File

@@ -885,10 +885,16 @@ class SnippetNoteDetail extends React.Component {
})
})
})
const currentOption = options.filter(
const currentOption = _.find(
options,
option =>
option.storage.key === storageKey && option.folder.key === folderKey
)[0]
)
// currentOption may be undefined
const storageName = _.get(currentOption, 'storage.name') || ''
const folderName = _.get(currentOption, 'folder.name') || ''
const trashTopBar = (
<div styleName='info'>
@@ -901,8 +907,8 @@ class SnippetNoteDetail extends React.Component {
/>
<InfoButton onClick={e => this.handleInfoButtonClick(e)} />
<InfoPanelTrashed
storageName={currentOption.storage.name}
folderName={currentOption.folder.name}
storageName={storageName}
folderName={folderName}
updatedAt={formatDate(note.updatedAt)}
createdAt={formatDate(note.createdAt)}
exportAsMd={this.showWarning}
@@ -951,8 +957,8 @@ class SnippetNoteDetail extends React.Component {
<InfoButton onClick={e => this.handleInfoButtonClick(e)} />
<InfoPanel
storageName={currentOption.storage.name}
folderName={currentOption.folder.name}
storageName={storageName}
folderName={folderName}
noteLink={`[${note.title}](:note:${
queryString.parse(location.search).key
})`}