Skip to content

Commit dc6a04f

Browse files
authored
Merge pull request #4 from carsakiller/refactor
refactor: redo basically everything
2 parents 30fdb4e + 001f6c4 commit dc6a04f

24 files changed

+333
-427
lines changed

src/commands/accessToken.ts

-6
This file was deleted.

src/commands/addLocalAddon.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import type { LocalAddon } from "@/types/addon";
2+
import { useLocalAddonsStore } from "@/stores/localAddons.store";
3+
4+
export default (data: { data: LocalAddon }) => {
5+
const addonStore = useLocalAddonsStore();
6+
7+
const index = addonStore.addons.findIndex(
8+
(addon) => addon.name === data.data.name
9+
);
10+
11+
if (index > -1) {
12+
Object.assign(addonStore.addons[index], data.data);
13+
} else {
14+
addonStore.$patch((state) => {
15+
state.addons.push(data.data);
16+
});
17+
}
18+
19+
addonStore.loading = false;
20+
};

src/commands/addRemoteAddon.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { useRemoteAddonStore } from "@/stores/remoteAddons";
2+
import type { RemoteAddon } from "@/types/addon";
3+
4+
export default (data: { data: RemoteAddon }) => {
5+
const addonStore = useRemoteAddonStore();
6+
7+
const index = addonStore.addons.findIndex(
8+
(addon) => addon.name === data.data.name
9+
);
10+
11+
if (index > -1) {
12+
Object.assign(addonStore.addons[index], data.data);
13+
} else {
14+
addonStore.$patch((state) => {
15+
state.addons.push(data.data);
16+
});
17+
}
18+
19+
addonStore.loading = false;
20+
};

src/commands/index.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1-
import accessToken from "./accessToken";
2-
import localAddons from "./localAddons";
1+
import addLocalAddon from "./addLocalAddon";
2+
import removeLocalAddon from "./removeLocalAddon";
3+
import addRemoteAddon from "./addRemoteAddon";
34
import workspaceOpen from "./workspaceOpen";
5+
import localAddonStore from "./localAddonStore";
6+
import remoteAddonStore from "./remoteAddonStore";
47

58
export const commands: { [index: string]: (data: any) => any } = {
6-
accessToken,
7-
localAddons,
9+
addLocalAddon,
10+
removeLocalAddon,
11+
addRemoteAddon,
812
workspaceOpen,
13+
localAddonStore,
14+
remoteAddonStore,
915
};

src/commands/localAddonStore.ts

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { useLocalAddonsStore } from "@/stores/localAddons.store";
2+
3+
type Message = {
4+
data: {
5+
prop: string;
6+
value: any;
7+
};
8+
};
9+
10+
export default (message: Message) => {
11+
const localAddonStore = useLocalAddonsStore();
12+
13+
const { prop, value } = message.data;
14+
15+
//@ts-ignore
16+
localAddonStore[prop] = value;
17+
};

src/commands/localAddons.ts

-17
This file was deleted.

src/commands/remoteAddonStore.ts

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { useRemoteAddonStore } from "@/stores/remoteAddons";
2+
3+
type Message = {
4+
data: {
5+
prop: string;
6+
value: any;
7+
};
8+
};
9+
10+
export default (message: Message) => {
11+
const remoteAddonStore = useRemoteAddonStore();
12+
13+
const { prop, value } = message.data;
14+
15+
//@ts-ignore
16+
remoteAddonStore[prop] = value;
17+
};

src/commands/removeLocalAddon.ts

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { useLocalAddonsStore } from "@/stores/localAddons.store";
2+
3+
export default (message: { data: { name: string } }) => {
4+
const addonStore = useLocalAddonsStore();
5+
6+
const index = addonStore.addons.findIndex((addon) => {
7+
console.log(addon.name, message.data.name);
8+
return addon.name === message.data.name;
9+
});
10+
11+
if (index < 0) {
12+
console.warn(`Could not find "${message.data.name}" addon to remove`);
13+
return;
14+
}
15+
16+
addonStore.$patch((state) => {
17+
state.addons.splice(index, 1);
18+
});
19+
};

src/commands/workspaceOpen.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { useAppStore } from "@/stores/app";
22

3-
export default (data: { data: boolean }) => {
3+
export default (message: { data: boolean }) => {
44
const appStore = useAppStore();
5-
appStore.workspaceOpen = data.data;
5+
6+
console.log(message.data);
7+
8+
appStore.workspaceOpen = message.data;
69
};

src/components/Addon.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
</template>
3939

4040
<script setup lang="ts">
41-
import type { Addon } from "@/services/addon.service";
41+
import type { Addon } from "@/types/addon";
4242
4343
import CodeIcon from "./CodeIcon.vue";
4444
@@ -50,7 +50,7 @@ const props = defineProps<{ addon: Addon }>();
5050
5151
const url = `https://github.com/${REPOSITORY_OWNER}/${REPOSITORY_NAME}/tree/main/${ADDONS_DIRECTORY}/${props.addon.name}`;
5252
53-
const description = computed(() => props.addon.description ?? "No Description");
53+
const description = computed(() => props.addon.description ?? "No description");
5454
const size = computed(() =>
5555
props.addon.size ? formatBytes(props.addon.size) : "? B"
5656
);

src/components/LocalAddon.vue

+61-30
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,60 @@
11
<template>
22
<Addon :addon="props.addon">
33
<template #badges>
4-
<span class="badge" v-if="hasPlugin">Plugin</span>
5-
<span class="badge" v-if="commitDate"
6-
><CodeIcon icon="cloud-download" />{{ commitDate }}</span
4+
<span class="badge" v-if="props.addon.hasPlugin">Plugin</span>
5+
<span class="badge" v-if="installDateFromNow" :title="installDate"
6+
><CodeIcon icon="cloud-download" />{{ installDateFromNow }}</span
77
>
88
<span v-if="updateAvailable" class="badge">
99
<CodeIcon icon="repo-pull" />Update Available
1010
</span>
1111
</template>
1212
<template #quick-actions>
1313
<button
14-
@click="addon.open"
15-
:title="`Open ${addon.name} in file explorer`"
14+
@click="open"
15+
:title="`Open ${props.addon.name} in file explorer`"
1616
>
1717
<CodeIcon icon="folder" />
1818
</button>
1919
</template>
2020
<template #controls>
2121
<vscode-button
2222
v-if="updateAvailable"
23-
@click="remoteAddon?.download"
24-
:aria-label="`Update ${name}`"
25-
:title="`Update ${name}`"
23+
@click="update"
24+
:aria-label="`Update ${props.addon.name}`"
25+
:title="`Update ${props.addon.name}`"
2626
>Update</vscode-button
2727
>
2828
<vscode-button
29-
v-if="!enabled"
29+
v-if="!props.addon.enabled"
3030
:disabled="!workspaceOpen"
31-
:aria-label="`Enable ${name}`"
31+
:aria-label="`Enable ${props.addon.name}`"
3232
:title="
33-
!workspaceOpen ? 'There is no workspace open' : `Enable ${name}`
33+
!workspaceOpen
34+
? 'There is no workspace open'
35+
: `Enable ${props.addon.name}`
3436
"
35-
@click="addon.enable"
37+
@click="enable"
3638
appearance="primary"
3739
>Enable</vscode-button
3840
>
3941
<vscode-button
40-
v-if="enabled"
42+
v-if="props.addon.enabled"
4143
:disabled="!workspaceOpen"
42-
:aria-label="`Disable ${name}`"
44+
:aria-label="`Disable ${props.addon.name}`"
4345
:title="
44-
!workspaceOpen ? 'There is no workspace open' : `Disable ${name}`
46+
!workspaceOpen
47+
? 'There is no workspace open'
48+
: `Disable ${props.addon.name}`
4549
"
46-
@click="addon.disable"
50+
@click="disable"
4751
appearance="primary"
4852
>Disable</vscode-button
4953
>
5054
<vscode-button
51-
:aria-label="`Uninstall ${name}`"
52-
:title="`Uninstall ${name}`"
53-
@click="addon.uninstall"
55+
:aria-label="`Uninstall ${props.addon.name}`"
56+
:title="`Uninstall ${props.addon.name}`"
57+
@click="uninstall"
5458
appearance="secondary"
5559
>Uninstall</vscode-button
5660
>
@@ -59,35 +63,62 @@
5963
</template>
6064

6165
<script setup lang="ts">
62-
import type { LocalAddon } from "@/services/addon.service";
66+
import type { LocalAddon } from "@/types/addon";
6367
6468
import { computed } from "vue";
69+
import dayjs from "dayjs";
6570
import CodeIcon from "@/components/CodeIcon.vue";
6671
import Addon from "./Addon.vue";
67-
import { useAddonStore } from "@/stores/remoteAddons";
6872
import {
6973
provideVSCodeDesignSystem,
7074
vsCodeButton,
7175
} from "@vscode/webview-ui-toolkit";
7276
import { useAppStore } from "@/stores/app";
77+
import { vscode } from "@/services/vscode.service";
7378
7479
provideVSCodeDesignSystem().register(vsCodeButton());
7580
7681
const props = defineProps<{ addon: LocalAddon }>();
7782
78-
const remoteAddonStore = useAddonStore();
7983
const appStore = useAppStore();
8084
81-
// Get remote version of this addon to compare versions
82-
const remoteAddon = computed(() => remoteAddonStore.getAddon(props.addon.name));
83-
const updateAvailable = computed(() =>
84-
remoteAddon.value?.commitDate?.isAfter(props.addon.installDate)
85+
const installDateFromNow = computed(() =>
86+
dayjs(props.addon.installTimestamp).fromNow()
8587
);
88+
const installDate = computed(() =>
89+
dayjs(props.addon.installTimestamp).local().format("MMMM DD, YYYY, h:mm A")
90+
);
91+
const updateAvailable = computed(() => props.addon.hasUpdate);
8692
8793
const workspaceOpen = computed(() => appStore.workspaceOpen);
8894
89-
const name = computed(() => props.addon.name);
90-
const enabled = computed(() => props.addon.enabled);
91-
const commitDate = computed(() => props.addon.installDate?.fromNow());
92-
const hasPlugin = computed(() => props.addon.hasPlugin);
95+
const uninstall = () => {
96+
vscode.postMessage("uninstall", {
97+
name: props.addon.name,
98+
});
99+
};
100+
101+
const disable = () => {
102+
vscode.postMessage("disable", {
103+
name: props.addon.name,
104+
});
105+
};
106+
107+
const enable = () => {
108+
vscode.postMessage("enable", {
109+
name: props.addon.name,
110+
});
111+
};
112+
113+
const update = () => {
114+
vscode.postMessage("install", {
115+
name: props.addon.name,
116+
});
117+
};
118+
119+
const open = () => {
120+
vscode.postMessage("open", {
121+
name: props.addon.name,
122+
});
123+
};
93124
</script>

src/components/RemoteAddon.vue

+23-18
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,54 @@
22
<Addon :addon="props.addon">
33
<template #badges>
44
<span class="badge" v-if="commitDate">Updated {{ commitDate }}</span>
5-
<span class="badge" v-if="hasPlugin">Plugin</span>
5+
<span class="badge" v-if="addon.hasPlugin">Plugin</span>
66
</template>
77
<template #controls>
8-
<vscode-button v-if="!installedAddonStore.loading && localAddon" disabled
8+
<vscode-button v-if="!installedAddonStore.loading && installed" disabled
99
>Installed</vscode-button
1010
>
1111
<vscode-button
12-
v-if="!installedAddonStore.loading && !localAddon"
13-
:aria-label="`Install ${name}`"
14-
:title="`Install ${name}`"
15-
@click="props.addon.download"
12+
v-if="!installedAddonStore.loading && !installed"
13+
:aria-label="`Install ${addon.name}`"
14+
:title="`Install ${addon.name}`"
15+
@click="download"
1616
>Install</vscode-button
1717
>
1818
</template>
1919
</Addon>
2020
</template>
2121

2222
<script setup lang="ts">
23-
import type { RemoteAddon } from "@/services/addon.service";
24-
25-
import Addon from "./Addon.vue";
26-
import { PLUGIN_FILENAME } from "@/config";
23+
import type { RemoteAddon } from "@/types/addon";
2724
2825
import { computed } from "vue";
29-
import { useInstalledAddonStore } from "@/stores/installedAddons";
26+
import dayjs from "dayjs";
27+
28+
import Addon from "./Addon.vue";
29+
import { useLocalAddonsStore } from "@/stores/localAddons.store";
3030
3131
import {
3232
provideVSCodeDesignSystem,
3333
vsCodeButton,
3434
} from "@vscode/webview-ui-toolkit";
35+
import { vscode } from "@/services/vscode.service";
3536
3637
provideVSCodeDesignSystem().register(vsCodeButton());
3738
3839
const props = defineProps<{ addon: RemoteAddon }>();
3940
40-
const installedAddonStore = useInstalledAddonStore();
41-
const localAddon = computed(() =>
42-
installedAddonStore.getAddon(props.addon.name)
41+
const installedAddonStore = useLocalAddonsStore();
42+
const installed = computed(
43+
() => installedAddonStore.getAddon(props.addon.name) !== undefined
4344
);
4445
45-
const name = computed(() => props.addon.name);
46-
const commitDate = computed(() => props.addon.commitDate?.fromNow());
47-
const hasPlugin = computed(() =>
48-
props.addon.tree?.find((node) => node.path === PLUGIN_FILENAME)
46+
const commitDate = computed(() =>
47+
dayjs(props.addon.latestCommitTimestamp)?.fromNow()
4948
);
49+
50+
const download = () => {
51+
vscode.postMessage("install", {
52+
name: props.addon.name,
53+
});
54+
};
5055
</script>

0 commit comments

Comments
 (0)