diff --git a/src/ui/CustomModal.ts b/src/ui/CustomModal.ts deleted file mode 100644 index 003e367..0000000 --- a/src/ui/CustomModal.ts +++ /dev/null @@ -1,162 +0,0 @@ -import {App, Modal, Setting} from "obsidian"; -import ObsidianSyncNotionPlugin from "../main"; -import {ObsidianSettingTab} from "./settingTabs"; -import {i18nConfig} from "../lang/I18n"; - -export class CustomModal extends Modal { - propertyLines: Setting[] = []; // Store all property line settings - properties: { customName: string, customType: string }[] = []; // Array to store property values and types - plugin: ObsidianSyncNotionPlugin; - settingTab: ObsidianSettingTab; - - constructor(app: App) { - super(app); - } - - createPropertyLine(containerEl: HTMLElement): void { - const propertyIndex = this.properties.length; - this.properties.push({customName: "", customType: ""}); // Initialize with empty values - - const propertyLine = new Setting(containerEl) - - if (propertyIndex === 0) { - propertyLine - .setName(i18nConfig.CustomPropertyFirstColumn) - .setDesc(i18nConfig.CustomPropertyFirstColumnDesc) - - propertyLine.addText((text) => { - text - .setPlaceholder("Property name") - .setValue("") - .onChange(async (value) => { - this.properties[propertyIndex].customName = value; // Update the customValue of the specific property - }); - - } - ) - - propertyLine.addDropdown((dropdown) => { - dropdown - .addOption("title", "Title") - .setValue("") - .onChange(async (value) => { - this.properties[propertyIndex].customType = value; // Update the customType of the specific property - }); - } - ) - } else { - propertyLine - .setName(i18nConfig.CustomProperty + (propertyIndex)) - - propertyLine.addText((text) => { - text - .setPlaceholder(i18nConfig.CustomPropertyName) - .setValue("") - .onChange(async (value) => { - this.properties[propertyIndex].customName = value; // Update the customValue of the specific property - }); - } - ) - - propertyLine.addDropdown((dropdown) => { - dropdown - // .addOption("none", '') - .addOption("text", "Text") - .addOption("number", "Number") - .addOption("select", "Select") - .addOption("multi_select", "Multi-Select") - .addOption("date", "Date") - // .addOption("person", "Person") - .addOption("files", "Files & Media") - .addOption("checkbox", "Checkbox") - .addOption("url", "URL") - .addOption("email", "Email") - .addOption("phone_number", "Phone Number") - // .addOption("formula", "Formula") - // .addOption("relation", "Relation") - // .addOption("rollup", "Rollup") - // .addOption("created_time", "Created time") - // .addOption("created_by", "Created by") - // .addOption("last_edited_time", "Last Edited Time") - // .addOption("last_edited_by", "Last Edited By") - .setValue("") - .onChange(async (value) => { - this.properties[propertyIndex].customType = value; // Update the customType of the specific property - }); - } - ) - - propertyLine.addButton((button) => { - return button - .setTooltip("Delete") - .setIcon("trash") - .onClick(async () => { - // Handle the deletion of this property line - this.propertyLines = this.propertyLines.filter(line => line !== propertyLine); - this.properties.splice(propertyIndex, 1); // Remove the property from the array - propertyLine.settingEl.remove(); - }); - } - ); - } - this.propertyLines.push(propertyLine); - } - - - display(): void { - - this.containerEl.addClass("custom-modal"); - this.titleEl.setText(i18nConfig.AddCustomProperty); - - let {contentEl} = this; - contentEl.empty(); - - const customDiv = contentEl.createDiv("custom-div"); - - new Setting(customDiv) - .setName(i18nConfig.AddNewProperty) - .setDesc(i18nConfig.AddNewPropertyDesc) - .addButton((button) => { - return button - .setTooltip("Add") - .setIcon("plus") - .onClick(async () => { - const customTabs = customDiv.createDiv("custom-tabs"); - this.createPropertyLine(customTabs); - }); - }); - - - let footerEl = this.contentEl.createDiv("save-custom-value"); - let saveButton = new Setting(footerEl) - saveButton.addButton((button) => { - return button - .setTooltip("Save") - .setIcon("checkmark") - .onClick(async () => { - this.close(); - }); - } - ); - - saveButton.addExtraButton((button) => { - return button - .setTooltip("Cancel") - .setIcon("cross") - .onClick(async () => { - this.close(); - }); - } - ); - } - - onOpen(): void { - this.display(); - } - - onClose(): void { - const {contentEl} = this; - - contentEl.empty(); - } -} diff --git a/src/ui/settingModal.ts b/src/ui/settingModal.ts index 6195085..feaf89c 100644 --- a/src/ui/settingModal.ts +++ b/src/ui/settingModal.ts @@ -8,10 +8,12 @@ import { import {i18nConfig} from "../lang/I18n"; import ObsidianSyncNotionPlugin from "../main"; import {DatabaseDetails, ObsidianSettingTab} from "./settingTabs"; -import {CustomModal} from "./CustomModal"; +// import {CustomModal} from "./CustomModal"; export class SettingModal extends Modal { + propertyLines: Setting[] = []; // Store all property line settings + properties: { customName: string, customType: string }[] = []; // Array to store property values and types [key: string]: any; // Index signature data: Record = { databaseFormat: 'none', @@ -223,15 +225,8 @@ export class SettingModal extends Modal { .setTooltip('Add new property') .setIcon('plus') .onClick(async () => { - let customModal = new CustomModal(this.app); - - customModal.onClose = () => { - - this.renderCustomPreview(customModal.properties, nextTabs) - this.data.customProperties = customModal.properties; - } - - customModal.open(); + const customTabs = nextTabs.createDiv("custom-tabs"); + this.createPropertyLine(customTabs); }); } ); @@ -255,6 +250,95 @@ export class SettingModal extends Modal { } + createPropertyLine(containerEl: HTMLElement): void { + const propertyIndex = this.properties.length; + this.properties.push({customName: "", customType: ""}); // Initialize with empty values + + const propertyLine = new Setting(containerEl) + + if (propertyIndex === 0) { + propertyLine + .setName(i18nConfig.CustomPropertyFirstColumn) + .setDesc(i18nConfig.CustomPropertyFirstColumnDesc) + + propertyLine.addText((text) => { + text + .setPlaceholder("Property name") + .setValue("") + .onChange(async (value) => { + this.properties[propertyIndex].customName = value; // Update the customValue of the specific property + }); + + } + ) + + propertyLine.addDropdown((dropdown) => { + dropdown + .addOption("title", "Title") + .setValue("") + .onChange(async (value) => { + this.properties[propertyIndex].customType = value; // Update the customType of the specific property + }); + } + ) + } else { + propertyLine + .setName(i18nConfig.CustomProperty + (propertyIndex)) + + propertyLine.addText((text) => { + text + .setPlaceholder(i18nConfig.CustomPropertyName) + .setValue("") + .onChange(async (value) => { + this.properties[propertyIndex].customName = value; // Update the customValue of the specific property + }); + } + ) + + propertyLine.addDropdown((dropdown) => { + dropdown + // .addOption("none", '') + .addOption("text", "Text") + .addOption("number", "Number") + .addOption("select", "Select") + .addOption("multi_select", "Multi-Select") + .addOption("date", "Date") + // .addOption("person", "Person") + .addOption("files", "Files & Media") + .addOption("checkbox", "Checkbox") + .addOption("url", "URL") + .addOption("email", "Email") + .addOption("phone_number", "Phone Number") + // .addOption("formula", "Formula") + // .addOption("relation", "Relation") + // .addOption("rollup", "Rollup") + // .addOption("created_time", "Created time") + // .addOption("created_by", "Created by") + // .addOption("last_edited_time", "Last Edited Time") + // .addOption("last_edited_by", "Last Edited By") + .setValue("") + .onChange(async (value) => { + this.properties[propertyIndex].customType = value; // Update the customType of the specific property + }); + } + ) + + propertyLine.addButton((button) => { + return button + .setTooltip("Delete") + .setIcon("trash") + .onClick(async () => { + // Handle the deletion of this property line + this.propertyLines = this.propertyLines.filter(line => line !== propertyLine); + this.properties.splice(propertyIndex, 1); // Remove the property from the array + propertyLine.settingEl.remove(); + }); + } + ); + } + this.propertyLines.push(propertyLine); + } + // create a function to create a div with a style for pop over elements public createStyleDiv(className: string, commandValue: boolean = false, parentEl: HTMLElement) { diff --git a/src/upload/upoload_custom/BaseUpload2NotionCustom.ts b/src/upload/upoload_custom/BaseUpload2NotionCustom.ts index 5c49e60..54ae60d 100644 --- a/src/upload/upoload_custom/BaseUpload2NotionCustom.ts +++ b/src/upload/upoload_custom/BaseUpload2NotionCustom.ts @@ -50,46 +50,4 @@ export class UploadBaseCustom { return null; // or some other default value, if you prefer } } - - // async updateYamlInfo(yamlContent: string, nowFile: TFile, res: any, app: App, settings: any) { - // let {url, id} = res.json - // // replace www to notionID - // const {notionUser} = this.plugin.settings; - // - // if (notionUser !== "") { - // // replace url str "www" to notionID - // url = url.replace("www.notion.so", `${notionUser}.notion.site`) - // } - // - // await app.fileManager.processFrontMatter(nowFile, yamlContent => { - // if (yamlContent['notionID']) { - // delete yamlContent['notionID'] - // } - // if (yamlContent['link']) { - // delete yamlContent['link'] - // } - // // add new notionID and link - // yamlContent.notionID = id; - // yamlContent.link = url; - // }); - // - // try { - // await navigator.clipboard.writeText(url) - // } catch (error) { - // new Notice(`复制链接失败,请手动复制${error}`) - // } - // // const __content = yamlContent.__content; - // // delete yamlContent.__content - // // const yamlhead = yaml.stringify(yamlContent) - // // // if yamlhead hava last \n remove it - // // const yamlhead_remove_n = yamlhead.replace(/\n$/, '') - // // // if __content have start \n remove it - // // const __content_remove_n = __content.replace(/^\n/, '') - // // const content = '---\n' +yamlhead_remove_n +'\n---\n' + __content_remove_n; - // // try { - // // await nowFile.vault.modify(nowFile, content) - // // } catch (error) { - // // new Notice(`write file error ${error}`) - // // } - // } } diff --git a/src/upload/upoload_custom/Upload2NotionCustom.ts b/src/upload/upoload_custom/Upload2NotionCustom.ts index 69998f8..74d28d2 100644 --- a/src/upload/upoload_custom/Upload2NotionCustom.ts +++ b/src/upload/upoload_custom/Upload2NotionCustom.ts @@ -71,6 +71,8 @@ export class Upload2NotionCustom extends UploadBaseCustom { }; } + console.log(bodyString) + try { return await requestUrl({ url: `https://api.notion.com/v1/pages`, @@ -218,11 +220,15 @@ export class Upload2NotionCustom extends UploadBaseCustom { const properties: { [key: string]: any } = {}; + // Only include custom properties that have values customProperties.forEach(({customName, customType}) => { + if (customValues[customName] !== undefined) { properties[customName] = this.buildPropertyObject(customName, customType, customValues); } + } ); + console.log(properties) return { parent: {