This repository has been archived by the owner on Jul 25, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e9dffe7
commit 601250d
Showing
13 changed files
with
145 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,18 +5,22 @@ | |
"packageManager": "[email protected]", | ||
"license": "MIT", | ||
"scripts": { | ||
"dev": "NODE_ENV=development tsc & TS_NODE_FILES=1 TS_NODE_TRANSPILE_ONLY=1 NODE_ENV=development ts-node ./build.ts", | ||
"build": "NODE_ENV=production tsc && TS_NODE_FILES=1 TS_NODE_TRANSPILE_ONLY=1 NODE_ENV=production ts-node ./build.ts", | ||
"dev": "TS_NODE_FILES=1 TS_NODE_TRANSPILE_ONLY=1 NODE_ENV=development ts-node ./build.ts", | ||
"build": "TS_NODE_FILES=1 TS_NODE_TRANSPILE_ONLY=1 NODE_ENV=production ts-node ./build.ts", | ||
"install:win": "powershell -ExecutionPolicy Unrestricted -File ./scripts/install.ps1", | ||
"install:linux": "chmod +x ./scripts/install.sh && ./scripts/install.sh", | ||
"start:win": "powershell -ExecutionPolicy Unrestricted -File ./scripts/start.ps1", | ||
"start:linux": "chmod +x ./scripts/start.sh && ./scripts/start.sh", | ||
"lint": "rome check .", | ||
"lint": "tsc && rome check .", | ||
"lint:apply": "rome check . --apply", | ||
"lint:apply-unsafe": "rome check . --apply-unsafe", | ||
"format": "rome format . --write" | ||
}, | ||
"devDependencies": { | ||
"@flysoftbeta/qqntim-typings": "^2.0.1", | ||
"@flysoftbeta/qqntim-typings": "^3.0.0", | ||
"@types/node": "^20.4.2", | ||
"@types/react": "^18.2.15", | ||
"@types/react-dom": "^18.2.7", | ||
"@yarnpkg/sdks": "^3.0.0-rc.48", | ||
"esbuild": "^0.18.12", | ||
"fs-extra": "^11.1.1", | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
$ErrorActionPreference = "Stop" | ||
|
||
Set-Location ((Split-Path -Parent $MyInvocation.MyCommand.Definition) + "..") | ||
|
||
if ($null -eq $env:QQNTIM_HOME) { | ||
$env:QQNTIM_HOME = "$UserProfile\.qqntim" | ||
} | ||
|
||
$PluginId = (node --eval 'console.log(require("./publish/qqntim.json").id)') | ||
$PluginDir = "$env:QQNTIM_HOME\plugins\$PluginId" | ||
|
||
Copy-Item ".\dist" $PluginDir -Recurse -Force |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#!/usr/bin/env bash | ||
|
||
cd "$( dirname "${BASH_SOURCE[0]}" )/.." | ||
|
||
[ ! $QQNTIM_HOME ] && export QQNTIM_HOME="$HOME/.local/share/QQNTim" | ||
|
||
plugin_id=$(node --eval 'console.log(require("./publish/qqntim.json").id)') | ||
plugin_dir="$QQNTIM_HOME/plugins/$plugin_id" | ||
|
||
[ -d $plugin_dir ] && rm -rf "$plugin_dir" | ||
cp -rf ./dist "$plugin_dir" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
export const id = "my-template-plugin" as const; | ||
|
||
export const defaults: PluginConfig = { | ||
switchConfigItem: false, | ||
anotherSwitchConfigItem: false, | ||
inputConfigItem: "默认值", | ||
dropdownConfigItem: "A", | ||
}; | ||
export function getPluginConfig(config: Config | undefined) { | ||
return Object.assign({}, defaults, config?.[id] || {}); | ||
} | ||
|
||
export interface PluginConfig { | ||
switchConfigItem: boolean; | ||
anotherSwitchConfigItem: boolean; | ||
inputConfigItem: string; | ||
dropdownConfigItem: "A" | "B" | "C"; | ||
} | ||
export type Config = { | ||
[X in typeof id]?: Partial<PluginConfig>; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,10 @@ | ||
import { getPluginConfig } from "./config"; | ||
import * as qqntim from "qqntim/main"; | ||
|
||
export default class Entry implements QQNTim.Entry.Main { | ||
constructor() { | ||
const config = getPluginConfig(qqntim.env.config.plugins.config); | ||
console.log("[Template] Hello world!", qqntim); | ||
console.log("[Template] 当前插件配置:", config); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,10 @@ | ||
import { getPluginConfig } from "./config"; | ||
import * as qqntim from "qqntim/renderer"; | ||
|
||
export default class Entry implements QQNTim.Entry.Renderer { | ||
constructor() { | ||
const config = getPluginConfig(qqntim.env.config.plugins.config); | ||
console.log("[Template] Hello world!", qqntim); | ||
console.log("[Template] 当前插件配置:", config); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import { usePluginConfig } from "./utils/hooks"; | ||
import { defineSettingsPanels } from "qqntim-settings"; | ||
import { Dropdown, Input, SettingsBox, SettingsBoxItem, SettingsSection, Switch } from "qqntim-settings/components"; | ||
import { env } from "qqntim/renderer"; | ||
import { useMemo } from "react"; | ||
import { getPluginConfig } from "./config"; | ||
|
||
export default class Entry implements QQNTim.Entry.Renderer { | ||
constructor() { | ||
// 如果不需要设置界面,将下一行注释掉即可;如果需要在设置项目旁边加一个小图标,请将 `undefined` 改为一段 HTML 代码(可以是 `<svg>`, `<img>` 等等)。 | ||
defineSettingsPanels(["模板插件设置", SettingsPanel, undefined]); | ||
} | ||
} | ||
|
||
function SettingsPanel({ config: _config, setConfig: _setConfig }: QQNTim.Settings.PanelProps) { | ||
const [pluginConfig, setPluginConfig] = usePluginConfig(_config, _setConfig); | ||
const currentPluginConfigString = useMemo(() => JSON.stringify(getPluginConfig(env.config.plugins.config)), []); | ||
|
||
return ( | ||
<> | ||
<SettingsSection title="插件设置"> | ||
<SettingsBox> | ||
<SettingsBoxItem title="当前生效的插件配置:" description={[currentPluginConfigString]} /> | ||
<SettingsBoxItem title="开关" description={["这是一个开关。", `当前状态为:${pluginConfig.switchConfigItem ? "开" : "关"}`]}> | ||
<Switch checked={pluginConfig.switchConfigItem} onToggle={(state) => setPluginConfig("switchConfigItem", state)} /> | ||
</SettingsBoxItem> | ||
{pluginConfig.switchConfigItem && ( | ||
<SettingsBoxItem title="另一个开关" description={["这是另一个开关。", `当前状态为:${pluginConfig.anotherSwitchConfigItem ? "开" : "关"}`]}> | ||
<Switch checked={pluginConfig.anotherSwitchConfigItem} onToggle={(state) => setPluginConfig("anotherSwitchConfigItem", state)} /> | ||
</SettingsBoxItem> | ||
)} | ||
<SettingsBoxItem title="下拉菜单" description={["这是一个下拉菜单。", `当前状态为:${pluginConfig.dropdownConfigItem}`]}> | ||
<Dropdown | ||
items={[ | ||
["A" as const, "我是 A 选项"], | ||
["B" as const, "我是 B 选项"], | ||
["C" as const, "我是 C 选项"], | ||
]} | ||
selected={pluginConfig.dropdownConfigItem} | ||
onChange={(state) => setPluginConfig("dropdownConfigItem", state)} | ||
width="150px" | ||
/> | ||
</SettingsBoxItem> | ||
<SettingsBoxItem title="输入框" description={["这是一个输入框。", `当前状态为:${pluginConfig.inputConfigItem}`]} isLast={true}> | ||
<Input value={pluginConfig.inputConfigItem} onChange={(state) => setPluginConfig("inputConfigItem", state)} /> | ||
</SettingsBoxItem> | ||
</SettingsBox> | ||
</SettingsSection> | ||
</> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import { Config, PluginConfig, getPluginConfig, id } from "../config"; | ||
import { useEffect, useState } from "react"; | ||
|
||
export function usePluginConfig(config: Record<string, object>, setConfig: React.Dispatch<React.SetStateAction<Record<string, object>>>) { | ||
const [pluginConfig, _setPluginConfig] = useState<PluginConfig>(getPluginConfig(config)); | ||
|
||
useEffect( | ||
() => | ||
setConfig((prev) => { | ||
return { ...prev, [id]: pluginConfig }; | ||
}), | ||
[pluginConfig], | ||
); | ||
|
||
const setPluginConfig = function <T extends keyof PluginConfig>(key: T, value: PluginConfig[T]) { | ||
_setPluginConfig((prev) => { | ||
return { | ||
...prev, | ||
[key]: value, | ||
}; | ||
}); | ||
}; | ||
|
||
return [pluginConfig, setPluginConfig] as const; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters