Chore: Typescript: Rewrite Footer (#20836)
This commit is contained in:
parent
ba64a9c76d
commit
617c06b376
11 changed files with 183 additions and 169 deletions
|
|
@ -1,58 +0,0 @@
|
|||
import Footer from "./Footer.vue";
|
||||
|
||||
export default {
|
||||
title: "Footer/Footer",
|
||||
component: Footer,
|
||||
argTypes: {
|
||||
version: { control: "object" },
|
||||
savings: { control: "object" },
|
||||
},
|
||||
};
|
||||
|
||||
const Template = (args) => ({
|
||||
components: { Footer },
|
||||
setup() {
|
||||
return { args };
|
||||
},
|
||||
template: '<Footer v-bind="args" />',
|
||||
});
|
||||
|
||||
export const Default = Template.bind({});
|
||||
Default.args = {
|
||||
version: {
|
||||
installed: "0.401",
|
||||
available: "0.401",
|
||||
},
|
||||
savings: {
|
||||
statistics: {
|
||||
"30d": { solarPercentage: 50 },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const UpdateNightly = Template.bind({});
|
||||
UpdateNightly.args = {
|
||||
version: {
|
||||
installed: "0.400",
|
||||
available: "0.400",
|
||||
commit: "5ce7be4",
|
||||
},
|
||||
savings: {
|
||||
statistics: {
|
||||
"30d": { solarPercentage: 22 },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const UpdateAvailable = Template.bind({});
|
||||
UpdateAvailable.args = {
|
||||
version: {
|
||||
installed: "0.400",
|
||||
available: "0.500",
|
||||
},
|
||||
savings: {
|
||||
statistics: {
|
||||
"30d": { solarPercentage: 100 },
|
||||
},
|
||||
},
|
||||
};
|
||||
59
assets/js/components/Footer/Footer.stories.ts
Normal file
59
assets/js/components/Footer/Footer.stories.ts
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
import Footer from "./Footer.vue";
|
||||
import type { Meta, StoryFn } from "@storybook/vue3";
|
||||
|
||||
export default {
|
||||
title: "Footer/Footer",
|
||||
component: Footer,
|
||||
argTypes: {
|
||||
version: { control: "object" },
|
||||
savings: { control: "object" },
|
||||
},
|
||||
} as Meta<typeof Footer>;
|
||||
|
||||
const Template: StoryFn<typeof Footer> = (args) => ({
|
||||
components: { Footer },
|
||||
setup() {
|
||||
return { args };
|
||||
},
|
||||
template: '<Footer v-bind="args" />',
|
||||
});
|
||||
|
||||
export const Default = Template.bind({});
|
||||
Default.args = {
|
||||
version: {
|
||||
installed: "0.401",
|
||||
available: "0.401",
|
||||
},
|
||||
savings: {
|
||||
statistics: {
|
||||
"30d": { solarPercentage: 50 },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const UpdateNightly = Template.bind({});
|
||||
UpdateNightly.args = {
|
||||
version: {
|
||||
installed: "0.400",
|
||||
available: "0.400",
|
||||
commit: "5ce7be4",
|
||||
},
|
||||
savings: {
|
||||
statistics: {
|
||||
"30d": { solarPercentage: 22 },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const UpdateAvailable = Template.bind({});
|
||||
UpdateAvailable.args = {
|
||||
version: {
|
||||
installed: "0.400",
|
||||
available: "0.500",
|
||||
},
|
||||
savings: {
|
||||
statistics: {
|
||||
"30d": { solarPercentage: 100 },
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -9,18 +9,19 @@
|
|||
</footer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="ts">
|
||||
import "@h2d2/shopicons/es/filled/testtube";
|
||||
|
||||
import Version from "./Version.vue";
|
||||
import Savings from "../Savings/Savings.vue";
|
||||
import { defineComponent } from "vue";
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: "Footer",
|
||||
components: { Version, Savings },
|
||||
props: {
|
||||
version: Object,
|
||||
savings: Object,
|
||||
},
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -22,10 +22,12 @@
|
|||
</svg>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
<script lang="ts">
|
||||
import { defineComponent } from "vue";
|
||||
|
||||
export default defineComponent({
|
||||
name: "Logo",
|
||||
};
|
||||
});
|
||||
</script>
|
||||
<style scoped>
|
||||
.letter {
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
import OfflineIndicator from "./OfflineIndicator.vue";
|
||||
|
||||
export default {
|
||||
title: "Footer/OfflineIndicator",
|
||||
component: OfflineIndicator,
|
||||
argTypes: {
|
||||
offline: { control: "boolean" },
|
||||
fatal: { control: "object" },
|
||||
},
|
||||
};
|
||||
|
||||
const Template = (args) => ({
|
||||
components: { OfflineIndicator },
|
||||
setup() {
|
||||
return { args };
|
||||
},
|
||||
template: '<OfflineIndicator v-bind="args" />',
|
||||
});
|
||||
|
||||
export const Offline = Template.bind({});
|
||||
Offline.args = {
|
||||
offline: true,
|
||||
};
|
||||
|
||||
export const Fatal = Template.bind({});
|
||||
Fatal.args = {
|
||||
fatal: {
|
||||
error: `cannot create charger 'wallbox_cphl': cannot create charger type 'template': cannot create
|
||||
charger type 'hardybarth-ecbl: Post http://192.168.2.219/api/v1/chargecontrols/1/mode: context deadline exceeded (Client.Timeout
|
||||
exceeded while awaiting headers)`,
|
||||
},
|
||||
};
|
||||
33
assets/js/components/Footer/OfflineIndicator.stories.ts
Normal file
33
assets/js/components/Footer/OfflineIndicator.stories.ts
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import OfflineIndicator from "./OfflineIndicator.vue";
|
||||
import type { Meta, StoryFn } from "@storybook/vue3";
|
||||
|
||||
export default {
|
||||
title: "Footer/OfflineIndicator",
|
||||
component: OfflineIndicator,
|
||||
argTypes: {
|
||||
offline: { control: "boolean" },
|
||||
fatal: { control: "object" },
|
||||
},
|
||||
} as Meta<typeof OfflineIndicator>;
|
||||
|
||||
const Template: StoryFn<typeof OfflineIndicator> = (args) => ({
|
||||
components: { OfflineIndicator },
|
||||
setup() {
|
||||
return { args };
|
||||
},
|
||||
template: '<OfflineIndicator v-bind="args" />',
|
||||
});
|
||||
|
||||
export const Offline = Template.bind({});
|
||||
Offline.args = {
|
||||
offline: true,
|
||||
};
|
||||
|
||||
export const Fatal = Template.bind({});
|
||||
Fatal.args = {
|
||||
fatal: {
|
||||
error: `cannot create charger 'wallbox_cphl': cannot create charger type 'template': cannot create
|
||||
charger type 'hardybarth-ecbl: Post http://192.168.2.219/api/v1/chargecontrols/1/mode: context deadline exceeded (Client.Timeout
|
||||
exceeded while awaiting headers)`,
|
||||
},
|
||||
};
|
||||
|
|
@ -72,13 +72,15 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="ts">
|
||||
import { defineComponent, type PropType } from "vue";
|
||||
import "@h2d2/shopicons/es/regular/car1";
|
||||
import CloudOffline from "../MaterialIcon/CloudOffline.vue";
|
||||
import Sync from "../MaterialIcon/Sync.vue";
|
||||
import restart, { performRestart, restartComplete } from "../../restart.js";
|
||||
import type { FatalError } from "assets/js/types/evcc.js";
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: "OfflineIndicator",
|
||||
components: {
|
||||
CloudOffline,
|
||||
|
|
@ -86,7 +88,7 @@ export default {
|
|||
},
|
||||
props: {
|
||||
offline: Boolean,
|
||||
fatal: Object,
|
||||
fatal: Object as PropType<FatalError>,
|
||||
},
|
||||
data() {
|
||||
return { dismissed: false };
|
||||
|
|
@ -129,7 +131,7 @@ export default {
|
|||
performRestart();
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
</script>
|
||||
<style scoped>
|
||||
.restart {
|
||||
|
|
|
|||
|
|
@ -1,61 +0,0 @@
|
|||
import Version from "./Version.vue";
|
||||
|
||||
const releaseNotes =
|
||||
'<h1>0.141</h1><p>Bug fixes:</p><ul><li>Withdraw Kia and Hyundai apis (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="817450535" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/699" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/699/hovercard" href="https://github.com/evcc-io/evcc/pull/699">#699</a>)</li><li>Simplify Tesla integration and fix upstream changes (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="817525274" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/700" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/700/hovercard" href="https://github.com/evcc-io/evcc/pull/700">#700</a>)</li><li>SHM: Check connected status (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="811567860" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/673" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/673/hovercard" href="https://github.com/evcc-io/evcc/pull/673">#673</a>)</li></ul><p>Enhancements:</p><ul><li>Add Seat api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="812885392" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/681" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/681/hovercard" href="https://github.com/evcc-io/evcc/pull/681">#681</a>)</li><li>Add Skoda api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="812883796" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/680" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/680/hovercard" href="https://github.com/evcc-io/evcc/pull/680">#680</a>)</li><li>Add Peugeot/Opel/Citroen api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="815612446" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/692" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/692/hovercard" href="https://github.com/evcc-io/evcc/pull/692">#692</a>)</li><li>KEBA: Support mA current resolution adjustments (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="801358501" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/646" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/646/hovercard" href="https://github.com/evcc-io/evcc/pull/646">#646</a>)</li></ul>';
|
||||
|
||||
export default {
|
||||
title: "Footer/Version",
|
||||
component: Version,
|
||||
parameters: {
|
||||
layout: "centered",
|
||||
},
|
||||
argTypes: {
|
||||
installed: { control: "text" },
|
||||
available: { control: "text" },
|
||||
commit: { control: "text" },
|
||||
releaseNotes: { control: "text" },
|
||||
hasUpdater: { control: "boolean" },
|
||||
},
|
||||
};
|
||||
|
||||
const Template = (args) => ({
|
||||
components: { Version },
|
||||
setup() {
|
||||
return { args };
|
||||
},
|
||||
template: '<Version v-bind="args" />',
|
||||
});
|
||||
|
||||
export const Latest = Template.bind({});
|
||||
Latest.args = {
|
||||
installed: "0.141",
|
||||
available: "0.141",
|
||||
};
|
||||
|
||||
export const Nightly = Template.bind({});
|
||||
Nightly.args = {
|
||||
installed: "0.141",
|
||||
available: "0.141",
|
||||
commit: "5ce7be4",
|
||||
};
|
||||
|
||||
export const UpdateAvailable = Template.bind({});
|
||||
UpdateAvailable.args = {
|
||||
installed: "0.141",
|
||||
available: "0.142",
|
||||
releaseNotes,
|
||||
};
|
||||
|
||||
export const AutoUpdater = Template.bind({});
|
||||
AutoUpdater.args = {
|
||||
installed: "0.141",
|
||||
available: "0.142",
|
||||
releaseNotes,
|
||||
hasUpdater: true,
|
||||
};
|
||||
|
||||
export const NoReleaseNotes = Template.bind({});
|
||||
NoReleaseNotes.args = {
|
||||
installed: "0.141",
|
||||
available: "0.142",
|
||||
};
|
||||
62
assets/js/components/Footer/Version.stories.ts
Normal file
62
assets/js/components/Footer/Version.stories.ts
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
import Version from "./Version.vue";
|
||||
import type { Meta, StoryFn } from "@storybook/vue3";
|
||||
|
||||
const releaseNotes =
|
||||
'<h1>0.141</h1><p>Bug fixes:</p><ul><li>Withdraw Kia and Hyundai apis (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="817450535" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/699" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/699/hovercard" href="https://github.com/evcc-io/evcc/pull/699">#699</a>)</li><li>Simplify Tesla integration and fix upstream changes (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="817525274" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/700" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/700/hovercard" href="https://github.com/evcc-io/evcc/pull/700">#700</a>)</li><li>SHM: Check connected status (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="811567860" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/673" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/673/hovercard" href="https://github.com/evcc-io/evcc/pull/673">#673</a>)</li></ul><p>Enhancements:</p><ul><li>Add Seat api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="812885392" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/681" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/681/hovercard" href="https://github.com/evcc-io/evcc/pull/681">#681</a>)</li><li>Add Skoda api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="812883796" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/680" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/680/hovercard" href="https://github.com/evcc-io/evcc/pull/680">#680</a>)</li><li>Add Peugeot/Opel/Citroen api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="815612446" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/692" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/692/hovercard" href="https://github.com/evcc-io/evcc/pull/692">#692</a>)</li><li>KEBA: Support mA current resolution adjustments (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="801358501" data-permission-text="Title is private" data-url="https://github.com/evcc-io/evcc/issues/646" data-hovercard-type="pull_request" data-hovercard-url="/evcc-io/evcc/pull/646/hovercard" href="https://github.com/evcc-io/evcc/pull/646">#646</a>)</li></ul>';
|
||||
|
||||
export default {
|
||||
title: "Footer/Version",
|
||||
component: Version,
|
||||
parameters: {
|
||||
layout: "centered",
|
||||
},
|
||||
argTypes: {
|
||||
installed: { control: "text" },
|
||||
available: { control: "text" },
|
||||
commit: { control: "text" },
|
||||
releaseNotes: { control: "text" },
|
||||
hasUpdater: { control: "boolean" },
|
||||
},
|
||||
} as Meta<typeof Version>;
|
||||
|
||||
const Template: StoryFn<typeof Version> = (args) => ({
|
||||
components: { Version },
|
||||
setup() {
|
||||
return { args };
|
||||
},
|
||||
template: '<Version v-bind="args" />',
|
||||
});
|
||||
|
||||
export const Latest = Template.bind({});
|
||||
Latest.args = {
|
||||
installed: "0.141",
|
||||
available: "0.141",
|
||||
};
|
||||
|
||||
export const Nightly = Template.bind({});
|
||||
Nightly.args = {
|
||||
installed: "0.141",
|
||||
available: "0.141",
|
||||
commit: "5ce7be4",
|
||||
};
|
||||
|
||||
export const UpdateAvailable = Template.bind({});
|
||||
UpdateAvailable.args = {
|
||||
installed: "0.141",
|
||||
available: "0.142",
|
||||
releaseNotes,
|
||||
};
|
||||
|
||||
export const AutoUpdater = Template.bind({});
|
||||
AutoUpdater.args = {
|
||||
installed: "0.141",
|
||||
available: "0.142",
|
||||
releaseNotes,
|
||||
hasUpdater: true,
|
||||
};
|
||||
|
||||
export const NoReleaseNotes = Template.bind({});
|
||||
NoReleaseNotes.args = {
|
||||
installed: "0.141",
|
||||
available: "0.142",
|
||||
};
|
||||
|
|
@ -125,14 +125,15 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="ts">
|
||||
import Modal from "bootstrap/js/dist/modal";
|
||||
import "@h2d2/shopicons/es/regular/gift";
|
||||
import "@h2d2/shopicons/es/regular/moonstars";
|
||||
import api from "../../api.js";
|
||||
import Logo from "./Logo.vue";
|
||||
import { defineComponent } from "vue";
|
||||
|
||||
export default {
|
||||
export default defineComponent({
|
||||
name: "Version",
|
||||
components: { Logo },
|
||||
props: {
|
||||
|
|
@ -173,17 +174,19 @@ export default {
|
|||
this.updateStatus = `${this.$t("footer.version.modalUpdateStatusStart")} ${e}`;
|
||||
}
|
||||
},
|
||||
releaseNotesUrl(version) {
|
||||
releaseNotesUrl(version?: string) {
|
||||
return version == "0.0.0"
|
||||
? `https://github.com/evcc-io/evcc/releases`
|
||||
: `https://github.com/evcc-io/evcc/releases/tag/${version}`;
|
||||
},
|
||||
openModal() {
|
||||
const modal = Modal.getOrCreateInstance(document.getElementById("updateModal"));
|
||||
const modal = Modal.getOrCreateInstance(
|
||||
document.getElementById("updateModal") as HTMLElement
|
||||
);
|
||||
modal.show();
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
|||
|
|
@ -7,15 +7,18 @@ declare global {
|
|||
}
|
||||
}
|
||||
|
||||
export interface FatalError {
|
||||
error: any;
|
||||
class?: any;
|
||||
}
|
||||
|
||||
export interface State {
|
||||
offline: boolean;
|
||||
startup?: boolean;
|
||||
loadpoints: [];
|
||||
forecast?: Forecast;
|
||||
currency?: CURRENCY;
|
||||
fatal?: {
|
||||
error: any;
|
||||
};
|
||||
fatal?: FatalError;
|
||||
}
|
||||
export interface LoadpointCompact {
|
||||
icon: string;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue