mirror of
https://github.com/jxpeng98/obsidian-to-NotionNext
synced 2026-07-29 16:35:57 +08:00
Update custom function and adjust the custom interface ui
This commit is contained in:
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,10 +8,12 @@ import {
|
|||||||
import {i18nConfig} from "../lang/I18n";
|
import {i18nConfig} from "../lang/I18n";
|
||||||
import ObsidianSyncNotionPlugin from "../main";
|
import ObsidianSyncNotionPlugin from "../main";
|
||||||
import {DatabaseDetails, ObsidianSettingTab} from "./settingTabs";
|
import {DatabaseDetails, ObsidianSettingTab} from "./settingTabs";
|
||||||
import {CustomModal} from "./CustomModal";
|
// import {CustomModal} from "./CustomModal";
|
||||||
|
|
||||||
|
|
||||||
export class SettingModal extends Modal {
|
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
|
[key: string]: any; // Index signature
|
||||||
data: Record<string, any> = {
|
data: Record<string, any> = {
|
||||||
databaseFormat: 'none',
|
databaseFormat: 'none',
|
||||||
@@ -223,15 +225,8 @@ export class SettingModal extends Modal {
|
|||||||
.setTooltip('Add new property')
|
.setTooltip('Add new property')
|
||||||
.setIcon('plus')
|
.setIcon('plus')
|
||||||
.onClick(async () => {
|
.onClick(async () => {
|
||||||
let customModal = new CustomModal(this.app);
|
const customTabs = nextTabs.createDiv("custom-tabs");
|
||||||
|
this.createPropertyLine(customTabs);
|
||||||
customModal.onClose = () => {
|
|
||||||
|
|
||||||
this.renderCustomPreview(customModal.properties, nextTabs)
|
|
||||||
this.data.customProperties = customModal.properties;
|
|
||||||
}
|
|
||||||
|
|
||||||
customModal.open();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -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
|
// create a function to create a div with a style for pop over elements
|
||||||
public createStyleDiv(className: string, commandValue: boolean = false, parentEl: HTMLElement) {
|
public createStyleDiv(className: string, commandValue: boolean = false, parentEl: HTMLElement) {
|
||||||
|
|||||||
@@ -50,46 +50,4 @@ export class UploadBaseCustom {
|
|||||||
return null; // or some other default value, if you prefer
|
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}`)
|
|
||||||
// // }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ export class Upload2NotionCustom extends UploadBaseCustom {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(bodyString)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return await requestUrl({
|
return await requestUrl({
|
||||||
url: `https://api.notion.com/v1/pages`,
|
url: `https://api.notion.com/v1/pages`,
|
||||||
@@ -218,11 +220,15 @@ export class Upload2NotionCustom extends UploadBaseCustom {
|
|||||||
|
|
||||||
const properties: { [key: string]: any } = {};
|
const properties: { [key: string]: any } = {};
|
||||||
|
|
||||||
|
// Only include custom properties that have values
|
||||||
customProperties.forEach(({customName, customType}) => {
|
customProperties.forEach(({customName, customType}) => {
|
||||||
|
if (customValues[customName] !== undefined) {
|
||||||
properties[customName] = this.buildPropertyObject(customName, customType, customValues);
|
properties[customName] = this.buildPropertyObject(customName, customType, customValues);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
console.log(properties)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
parent: {
|
parent: {
|
||||||
|
|||||||
Reference in New Issue
Block a user