Skip to content

Commit

Permalink
feat: Add toggle to disable creating a new tag on import
Browse files Browse the repository at this point in the history
  • Loading branch information
amanharwara committed Aug 18, 2023
1 parent ca9895c commit f26ad41
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,22 @@ import Modal, { ModalAction } from '../Modal/Modal'
import ModalOverlay from '../Modal/ModalOverlay'
import { ImportModalController } from '@/Controllers/ImportModalController'
import { useApplication } from '../ApplicationProvider'
import Switch from '../Switch/Switch'

const ImportModal = ({ importModalController }: { importModalController: ImportModalController }) => {
const application = useApplication()

const { files, setFiles, updateFile, removeFile, parseAndImport, isVisible, close } = importModalController
const {
files,
setFiles,
shouldCreateTag,
setShouldCreateTag,
updateFile,
removeFile,
parseAndImport,
isVisible,
close,
} = importModalController

const isReadyToImport = files.length > 0 && files.every((file) => file.status === 'ready')
const importSuccessOrError =
Expand Down Expand Up @@ -54,6 +65,12 @@ const ImportModal = ({ importModalController }: { importModalController: ImportM
</div>
)}
</div>
{files.length > 0 && (
<label className="py-2 px-4 flex items-center gap-2 border-t border-border">
<Switch checked={shouldCreateTag} onChange={setShouldCreateTag} />
<span className="text-sm">Create tag with all imported notes</span>
</label>
)}
</Modal>
</ModalOverlay>
)
Expand Down
41 changes: 26 additions & 15 deletions packages/web/src/javascripts/Controllers/ImportModalController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export type ImportModalFile = (

export class ImportModalController {
isVisible = false
shouldCreateTag = true
files: ImportModalFile[] = []
importTag: SNTag | undefined = undefined

Expand All @@ -41,6 +42,9 @@ export class ImportModalController {
isVisible: observable,
setIsVisible: action,

shouldCreateTag: observable,
setShouldCreateTag: action,

files: observable,
setFiles: action,
updateFile: action,
Expand All @@ -55,6 +59,10 @@ export class ImportModalController {
this.isVisible = isVisible
}

setShouldCreateTag = (shouldCreateTag: boolean) => {
this.shouldCreateTag = shouldCreateTag
}

setFiles = (files: File[], service?: NoteImportType) => {
this.files = files.map((file) => ({
id: UuidGenerator.GenerateUuid(),
Expand All @@ -78,6 +86,7 @@ export class ImportModalController {

close = () => {
this.setIsVisible(false)
this.setShouldCreateTag(true)
if (this.importTag) {
this.navigationController
.setSelectedTag(this.importTag, 'all', {
Expand Down Expand Up @@ -158,21 +167,23 @@ export class ImportModalController {
if (!importedPayloads.length) {
return
}
const currentDate = new Date()
const importTagItem = this.items.createTemplateItem<TagContent, SNTag>(ContentType.TYPES.Tag, {
title: `Imported on ${currentDate.toLocaleString()}`,
expanded: false,
iconString: '',
references: importedPayloads
.filter((payload) => payload.content_type === ContentType.TYPES.Note)
.map((payload) => ({
content_type: ContentType.TYPES.Note,
uuid: payload.uuid,
})),
})
const importTag = await this.mutator.insertItem(importTagItem)
if (importTag) {
this.setImportTag(importTag as SNTag)
if (this.shouldCreateTag) {
const currentDate = new Date()
const importTagItem = this.items.createTemplateItem<TagContent, SNTag>(ContentType.TYPES.Tag, {
title: `Imported on ${currentDate.toLocaleString()}`,
expanded: false,
iconString: '',
references: importedPayloads
.filter((payload) => payload.content_type === ContentType.TYPES.Note)
.map((payload) => ({
content_type: ContentType.TYPES.Note,
uuid: payload.uuid,
})),
})
const importTag = await this.mutator.insertItem(importTagItem)
if (importTag) {
this.setImportTag(importTag as SNTag)
}
}
}
}

0 comments on commit f26ad41

Please sign in to comment.