diff --git a/ui/v2.5/src/App.tsx b/ui/v2.5/src/App.tsx index 31a6a400e..db81aeb98 100755 --- a/ui/v2.5/src/App.tsx +++ b/ui/v2.5/src/App.tsx @@ -9,7 +9,11 @@ import LightboxProvider from "src/hooks/Lightbox/context"; import { initPolyfills } from "src/polyfills"; import locales from "src/locales"; -import { useConfiguration, useSystemStatus } from "src/core/StashService"; +import { + useConfiguration, + useConfigureUI, + useSystemStatus, +} from "src/core/StashService"; import { flattenMessages } from "src/utils"; import Mousetrap from "mousetrap"; import MousetrapPause from "mousetrap-pause"; @@ -22,6 +26,9 @@ import { LoadingIndicator, TITLE_SUFFIX } from "./components/Shared"; import { ConfigurationProvider } from "./hooks/Config"; import { ManualProvider } from "./components/Help/context"; import { InteractiveProvider } from "./hooks/Interactive/context"; +import { ReleaseNotesDialog } from "./components/Dialogs/ReleaseNotesDialog"; +import { IUIConfig } from "./core/config"; +import { releaseNotes } from "./docs/en/ReleaseNotes"; const Performers = lazy(() => import("./components/Performers/Performers")); const FrontPage = lazy(() => import("./components/FrontPage/FrontPage")); @@ -62,6 +69,8 @@ function languageMessageString(language: string) { export const App: React.FC = () => { const config = useConfiguration(); + const [saveUI] = useConfigureUI(); + const { data: systemStatusData } = useSystemStatus(); const language = @@ -161,6 +170,32 @@ export const App: React.FC = () => { ); } + function maybeRenderReleaseNotes() { + const lastNoteSeen = (config.data?.configuration.ui as IUIConfig) + ?.lastNoteSeen; + const notes = releaseNotes.filter((n) => { + return !lastNoteSeen || n.date > lastNoteSeen; + }); + + if (notes.length === 0) return; + + return ( + n.content)} + onClose={() => { + saveUI({ + variables: { + input: { + ...config.data?.configuration.ui, + lastNoteSeen: notes[0].date, + }, + }, + }); + }} + /> + ); + } + return ( {messages ? ( @@ -173,6 +208,7 @@ export const App: React.FC = () => { configuration={config.data?.configuration} loading={config.loading} > + {maybeRenderReleaseNotes()} }> diff --git a/ui/v2.5/src/components/Changelog/Changelog.tsx b/ui/v2.5/src/components/Changelog/Changelog.tsx index da38f5c7c..24e5cee5f 100644 --- a/ui/v2.5/src/components/Changelog/Changelog.tsx +++ b/ui/v2.5/src/components/Changelog/Changelog.tsx @@ -1,26 +1,27 @@ import React from "react"; import { useChangelogStorage } from "src/hooks"; import Version from "./Version"; -import V010 from "./versions/v010.md"; -import V011 from "./versions/v011.md"; -import V020 from "./versions/v020.md"; -import V021 from "./versions/v021.md"; -import V030 from "./versions/v030.md"; -import V040 from "./versions/v040.md"; -import V050 from "./versions/v050.md"; -import V060 from "./versions/v060.md"; -import V070 from "./versions/v070.md"; -import V080 from "./versions/v080.md"; -import V090 from "./versions/v090.md"; -import V0100 from "./versions/v0100.md"; -import V0110 from "./versions/v0110.md"; -import V0120 from "./versions/v0120.md"; -import V0130 from "./versions/v0130.md"; -import V0131 from "./versions/v0131.md"; -import V0140 from "./versions/v0140.md"; -import V0150 from "./versions/v0150.md"; -import V0160 from "./versions/v0160.md"; -import V0161 from "./versions/v0161.md"; +import V010 from "src/docs/en/Changelog/v010.md"; +import V011 from "src/docs/en/Changelog/v011.md"; +import V020 from "src/docs/en/Changelog/v020.md"; +import V021 from "src/docs/en/Changelog/v021.md"; +import V030 from "src/docs/en/Changelog/v030.md"; +import V040 from "src/docs/en/Changelog/v040.md"; +import V050 from "src/docs/en/Changelog/v050.md"; +import V060 from "src/docs/en/Changelog/v060.md"; +import V070 from "src/docs/en/Changelog/v070.md"; +import V080 from "src/docs/en/Changelog/v080.md"; +import V090 from "src/docs/en/Changelog/v090.md"; +import V0100 from "src/docs/en/Changelog/v0100.md"; +import V0110 from "src/docs/en/Changelog/v0110.md"; +import V0120 from "src/docs/en/Changelog/v0120.md"; +import V0130 from "src/docs/en/Changelog/v0130.md"; +import V0131 from "src/docs/en/Changelog/v0131.md"; +import V0140 from "src/docs/en/Changelog/v0140.md"; +import V0150 from "src/docs/en/Changelog/v0150.md"; +import V0160 from "src/docs/en/Changelog/v0160.md"; +import V0161 from "src/docs/en/Changelog/v0161.md"; +import V0170 from "src/docs/en/Changelog/v0170.md"; import { MarkdownPage } from "../Shared/MarkdownPage"; // to avoid use of explicit any @@ -59,9 +60,9 @@ const Changelog: React.FC = () => { // after new release: // add entry to releases, using the current* fields // then update the current fields. - const currentVersion = stashVersion || "v0.16.1"; + const currentVersion = stashVersion || "v0.17.0"; const currentDate = buildDate; - const currentPage = V0161; + const currentPage = V0170; const releases: IStashRelease[] = [ { @@ -70,6 +71,11 @@ const Changelog: React.FC = () => { page: currentPage, defaultOpen: true, }, + { + version: "v0.16.1", + date: "2022-07-26", + page: V0161, + }, { version: "v0.16.0", date: "2022-07-05", @@ -168,7 +174,7 @@ const Changelog: React.FC = () => { ]; return ( - <> +

Changelog:

{releases.map((r) => ( { ))} - +
); }; diff --git a/ui/v2.5/src/components/Changelog/styles.scss b/ui/v2.5/src/components/Changelog/styles.scss index abdf45545..07c88f698 100644 --- a/ui/v2.5/src/components/Changelog/styles.scss +++ b/ui/v2.5/src/components/Changelog/styles.scss @@ -1,6 +1,5 @@ .changelog { margin-bottom: 4rem; - margin-top: 4rem; .btn { color: inherit; diff --git a/ui/v2.5/src/components/Dialogs/ReleaseNotesDialog.tsx b/ui/v2.5/src/components/Dialogs/ReleaseNotesDialog.tsx new file mode 100644 index 000000000..fefc344be --- /dev/null +++ b/ui/v2.5/src/components/Dialogs/ReleaseNotesDialog.tsx @@ -0,0 +1,39 @@ +import React from "react"; +import { Form } from "react-bootstrap"; +import { Modal } from "src/components/Shared"; +import { faCogs } from "@fortawesome/free-solid-svg-icons"; +import { useIntl } from "react-intl"; +import { MarkdownPage } from "../Shared/MarkdownPage"; +import { Module } from "src/docs/en/ReleaseNotes"; + +interface IReleaseNotesDialog { + notes: Module[]; + onClose: () => void; +} + +export const ReleaseNotesDialog: React.FC = ({ + notes, + onClose, +}) => { + const intl = useIntl(); + + return ( + +
+ {notes.map((n, i) => ( + + ))} + +
+ ); +}; + +export default ReleaseNotesDialog; diff --git a/ui/v2.5/src/components/FrontPage/FrontPage.tsx b/ui/v2.5/src/components/FrontPage/FrontPage.tsx index cddebca9d..d68e2ca00 100644 --- a/ui/v2.5/src/components/FrontPage/FrontPage.tsx +++ b/ui/v2.5/src/components/FrontPage/FrontPage.tsx @@ -36,6 +36,7 @@ const FrontPage: React.FC = () => { await saveUI({ variables: { input: { + ...configuration?.ui, frontPageContent: content, }, }, diff --git a/ui/v2.5/src/components/Help/Manual.tsx b/ui/v2.5/src/components/Help/Manual.tsx index 83f787c2f..12faa3e26 100644 --- a/ui/v2.5/src/components/Help/Manual.tsx +++ b/ui/v2.5/src/components/Help/Manual.tsx @@ -1,27 +1,27 @@ import React, { useState, useEffect } from "react"; import { Modal, Container, Row, Col, Nav, Tab } from "react-bootstrap"; -import Introduction from "src/docs/en/Introduction.md"; -import Tasks from "src/docs/en/Tasks.md"; -import AutoTagging from "src/docs/en/AutoTagging.md"; -import JSONSpec from "src/docs/en/JSONSpec.md"; -import Configuration from "src/docs/en/Configuration.md"; -import Interface from "src/docs/en/Interface.md"; -import Galleries from "src/docs/en/Galleries.md"; -import Scraping from "src/docs/en/Scraping.md"; -import ScraperDevelopment from "src/docs/en/ScraperDevelopment.md"; -import Plugins from "src/docs/en/Plugins.md"; -import ExternalPlugins from "src/docs/en/ExternalPlugins.md"; -import EmbeddedPlugins from "src/docs/en/EmbeddedPlugins.md"; -import Tagger from "src/docs/en/Tagger.md"; -import Contributing from "src/docs/en/Contributing.md"; -import SceneFilenameParser from "src/docs/en/SceneFilenameParser.md"; -import KeyboardShortcuts from "src/docs/en/KeyboardShortcuts.md"; -import Help from "src/docs/en/Help.md"; -import Deduplication from "src/docs/en/Deduplication.md"; -import Interactive from "src/docs/en/Interactive.md"; -import Captions from "src/docs/en/Captions.md"; -import Identify from "src/docs/en/Identify.md"; -import Browsing from "src/docs/en/Browsing.md"; +import Introduction from "src/docs/en/Manual/Introduction.md"; +import Tasks from "src/docs/en/Manual/Tasks.md"; +import AutoTagging from "src/docs/en/Manual/AutoTagging.md"; +import JSONSpec from "src/docs/en/Manual/JSONSpec.md"; +import Configuration from "src/docs/en/Manual/Configuration.md"; +import Interface from "src/docs/en/Manual/Interface.md"; +import Galleries from "src/docs/en/Manual/Galleries.md"; +import Scraping from "src/docs/en/Manual/Scraping.md"; +import ScraperDevelopment from "src/docs/en/Manual/ScraperDevelopment.md"; +import Plugins from "src/docs/en/Manual/Plugins.md"; +import ExternalPlugins from "src/docs/en/Manual/ExternalPlugins.md"; +import EmbeddedPlugins from "src/docs/en/Manual/EmbeddedPlugins.md"; +import Tagger from "src/docs/en/Manual/Tagger.md"; +import Contributing from "src/docs/en/Manual/Contributing.md"; +import SceneFilenameParser from "src/docs/en/Manual/SceneFilenameParser.md"; +import KeyboardShortcuts from "src/docs/en/Manual/KeyboardShortcuts.md"; +import Help from "src/docs/en/Manual/Help.md"; +import Deduplication from "src/docs/en/Manual/Deduplication.md"; +import Interactive from "src/docs/en/Manual/Interactive.md"; +import Captions from "src/docs/en/Manual/Captions.md"; +import Identify from "src/docs/en/Manual/Identify.md"; +import Browsing from "src/docs/en/Manual/Browsing.md"; import { MarkdownPage } from "../Shared/MarkdownPage"; interface IManualProps { diff --git a/ui/v2.5/src/components/Settings/Settings.tsx b/ui/v2.5/src/components/Settings/Settings.tsx index 56d526bd7..1a408dcc1 100644 --- a/ui/v2.5/src/components/Settings/Settings.tsx +++ b/ui/v2.5/src/components/Settings/Settings.tsx @@ -17,6 +17,7 @@ import { SettingsServicesPanel } from "./SettingsServicesPanel"; import { SettingsContext } from "./context"; import { SettingsLibraryPanel } from "./SettingsLibraryPanel"; import { SettingsSecurityPanel } from "./SettingsSecurityPanel"; +import Changelog from "../Changelog/Changelog"; export const Settings: React.FC = () => { const intl = useIntl(); @@ -92,6 +93,11 @@ export const Settings: React.FC = () => { + + + + + @@ -138,6 +144,9 @@ export const Settings: React.FC = () => { + + + diff --git a/ui/v2.5/src/components/Setup/Migrate.tsx b/ui/v2.5/src/components/Setup/Migrate.tsx index 6dd6851ec..05f9efece 100644 --- a/ui/v2.5/src/components/Setup/Migrate.tsx +++ b/ui/v2.5/src/components/Setup/Migrate.tsx @@ -1,9 +1,11 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import { Button, Card, Container, Form } from "react-bootstrap"; import { useIntl, FormattedMessage } from "react-intl"; import * as GQL from "src/core/generated-graphql"; import { useSystemStatus, mutateMigrate } from "src/core/StashService"; +import { migrationNotes } from "src/docs/en/MigrationNotes"; import { LoadingIndicator } from "../Shared"; +import { MarkdownPage } from "../Shared/MarkdownPage"; export const Migrate: React.FC = () => { const { data: systemStatus, loading } = useSystemStatus(); @@ -45,8 +47,46 @@ export const Migrate: React.FC = () => { } }, [defaultBackupPath, backupPath]); + const status = systemStatus?.systemStatus; + + const maybeMigrationNotes = useMemo(() => { + if ( + !status || + status.databaseSchema === undefined || + status.databaseSchema === null || + status.appSchema === undefined || + status.appSchema === null + ) + return; + + const notes = []; + for (let i = status.databaseSchema; i <= status.appSchema; ++i) { + const note = migrationNotes[i]; + if (note) { + notes.push(note); + } + } + + if (notes.length === 0) return; + + return ( +
+

+ +

+
+ {notes.map((n, i) => ( +
+ +
+ ))} +
+
+ ); + }, [status]); + // only display setup wizard if system is not setup - if (loading || !systemStatus) { + if (loading || !systemStatus || !status) { return ; } @@ -67,8 +107,6 @@ export const Migrate: React.FC = () => { return ; } - const status = systemStatus.systemStatus; - async function onMigrate() { try { setMigrateLoading(true); @@ -148,6 +186,8 @@ export const Migrate: React.FC = () => {

+ {maybeMigrationNotes} +
diff --git a/ui/v2.5/src/components/Setup/styles.scss b/ui/v2.5/src/components/Setup/styles.scss new file mode 100644 index 000000000..e10d67c62 --- /dev/null +++ b/ui/v2.5/src/components/Setup/styles.scss @@ -0,0 +1,9 @@ +.migration-notes { + margin: 1rem; + + > div { + background-color: darken($color: $card-bg, $amount: 3); + border-radius: 3px; + padding: 16px; + } +} diff --git a/ui/v2.5/src/components/Stats.tsx b/ui/v2.5/src/components/Stats.tsx index 69007f122..7cc17b59a 100644 --- a/ui/v2.5/src/components/Stats.tsx +++ b/ui/v2.5/src/components/Stats.tsx @@ -2,7 +2,6 @@ import React from "react"; import { useStats } from "src/core/StashService"; import { FormattedMessage, FormattedNumber } from "react-intl"; import { LoadingIndicator } from "src/components/Shared"; -import Changelog from "src/components/Changelog/Changelog"; import { TextUtils } from "src/utils"; export const Stats: React.FC = () => { @@ -115,9 +114,6 @@ export const Stats: React.FC = () => {

-
- -
); }; diff --git a/ui/v2.5/src/core/config.ts b/ui/v2.5/src/core/config.ts index 007d70e32..7d0840f60 100644 --- a/ui/v2.5/src/core/config.ts +++ b/ui/v2.5/src/core/config.ts @@ -27,6 +27,7 @@ export type FrontPageContent = ISavedFilterRow | ICustomFilter; export interface IUIConfig { frontPageContent?: FrontPageContent[]; + lastNoteSeen?: number; } function recentlyReleased( diff --git a/ui/v2.5/src/components/Changelog/versions/v010.md b/ui/v2.5/src/docs/en/Changelog/v010.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v010.md rename to ui/v2.5/src/docs/en/Changelog/v010.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0100.md b/ui/v2.5/src/docs/en/Changelog/v0100.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0100.md rename to ui/v2.5/src/docs/en/Changelog/v0100.md diff --git a/ui/v2.5/src/components/Changelog/versions/v011.md b/ui/v2.5/src/docs/en/Changelog/v011.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v011.md rename to ui/v2.5/src/docs/en/Changelog/v011.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0110.md b/ui/v2.5/src/docs/en/Changelog/v0110.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0110.md rename to ui/v2.5/src/docs/en/Changelog/v0110.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0120.md b/ui/v2.5/src/docs/en/Changelog/v0120.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0120.md rename to ui/v2.5/src/docs/en/Changelog/v0120.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0130.md b/ui/v2.5/src/docs/en/Changelog/v0130.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0130.md rename to ui/v2.5/src/docs/en/Changelog/v0130.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0131.md b/ui/v2.5/src/docs/en/Changelog/v0131.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0131.md rename to ui/v2.5/src/docs/en/Changelog/v0131.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0140.md b/ui/v2.5/src/docs/en/Changelog/v0140.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0140.md rename to ui/v2.5/src/docs/en/Changelog/v0140.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0150.md b/ui/v2.5/src/docs/en/Changelog/v0150.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0150.md rename to ui/v2.5/src/docs/en/Changelog/v0150.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0160.md b/ui/v2.5/src/docs/en/Changelog/v0160.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0160.md rename to ui/v2.5/src/docs/en/Changelog/v0160.md diff --git a/ui/v2.5/src/components/Changelog/versions/v0161.md b/ui/v2.5/src/docs/en/Changelog/v0161.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v0161.md rename to ui/v2.5/src/docs/en/Changelog/v0161.md diff --git a/ui/v2.5/src/docs/en/Changelog/v0170.md b/ui/v2.5/src/docs/en/Changelog/v0170.md new file mode 100644 index 000000000..04d7d3eee --- /dev/null +++ b/ui/v2.5/src/docs/en/Changelog/v0170.md @@ -0,0 +1,5 @@ +### ✨ New Features +* Added release notes dialog. ([#](https://github.com/stashapp/stash/pull/)) + +### 🎨 Improvements +* Moved Changelogs to Settings page. ([#](https://github.com/stashapp/stash/pull/)) \ No newline at end of file diff --git a/ui/v2.5/src/components/Changelog/versions/v020.md b/ui/v2.5/src/docs/en/Changelog/v020.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v020.md rename to ui/v2.5/src/docs/en/Changelog/v020.md diff --git a/ui/v2.5/src/components/Changelog/versions/v021.md b/ui/v2.5/src/docs/en/Changelog/v021.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v021.md rename to ui/v2.5/src/docs/en/Changelog/v021.md diff --git a/ui/v2.5/src/components/Changelog/versions/v030.md b/ui/v2.5/src/docs/en/Changelog/v030.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v030.md rename to ui/v2.5/src/docs/en/Changelog/v030.md diff --git a/ui/v2.5/src/components/Changelog/versions/v040.md b/ui/v2.5/src/docs/en/Changelog/v040.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v040.md rename to ui/v2.5/src/docs/en/Changelog/v040.md diff --git a/ui/v2.5/src/components/Changelog/versions/v050.md b/ui/v2.5/src/docs/en/Changelog/v050.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v050.md rename to ui/v2.5/src/docs/en/Changelog/v050.md diff --git a/ui/v2.5/src/components/Changelog/versions/v060.md b/ui/v2.5/src/docs/en/Changelog/v060.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v060.md rename to ui/v2.5/src/docs/en/Changelog/v060.md diff --git a/ui/v2.5/src/components/Changelog/versions/v070.md b/ui/v2.5/src/docs/en/Changelog/v070.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v070.md rename to ui/v2.5/src/docs/en/Changelog/v070.md diff --git a/ui/v2.5/src/components/Changelog/versions/v080.md b/ui/v2.5/src/docs/en/Changelog/v080.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v080.md rename to ui/v2.5/src/docs/en/Changelog/v080.md diff --git a/ui/v2.5/src/components/Changelog/versions/v090.md b/ui/v2.5/src/docs/en/Changelog/v090.md similarity index 100% rename from ui/v2.5/src/components/Changelog/versions/v090.md rename to ui/v2.5/src/docs/en/Changelog/v090.md diff --git a/ui/v2.5/src/docs/en/AutoTagging.md b/ui/v2.5/src/docs/en/Manual/AutoTagging.md similarity index 100% rename from ui/v2.5/src/docs/en/AutoTagging.md rename to ui/v2.5/src/docs/en/Manual/AutoTagging.md diff --git a/ui/v2.5/src/docs/en/Browsing.md b/ui/v2.5/src/docs/en/Manual/Browsing.md similarity index 100% rename from ui/v2.5/src/docs/en/Browsing.md rename to ui/v2.5/src/docs/en/Manual/Browsing.md diff --git a/ui/v2.5/src/docs/en/Captions.md b/ui/v2.5/src/docs/en/Manual/Captions.md similarity index 100% rename from ui/v2.5/src/docs/en/Captions.md rename to ui/v2.5/src/docs/en/Manual/Captions.md diff --git a/ui/v2.5/src/docs/en/Configuration.md b/ui/v2.5/src/docs/en/Manual/Configuration.md similarity index 100% rename from ui/v2.5/src/docs/en/Configuration.md rename to ui/v2.5/src/docs/en/Manual/Configuration.md diff --git a/ui/v2.5/src/docs/en/Contributing.md b/ui/v2.5/src/docs/en/Manual/Contributing.md similarity index 100% rename from ui/v2.5/src/docs/en/Contributing.md rename to ui/v2.5/src/docs/en/Manual/Contributing.md diff --git a/ui/v2.5/src/docs/en/Deduplication.md b/ui/v2.5/src/docs/en/Manual/Deduplication.md similarity index 100% rename from ui/v2.5/src/docs/en/Deduplication.md rename to ui/v2.5/src/docs/en/Manual/Deduplication.md diff --git a/ui/v2.5/src/docs/en/EmbeddedPlugins.md b/ui/v2.5/src/docs/en/Manual/EmbeddedPlugins.md similarity index 100% rename from ui/v2.5/src/docs/en/EmbeddedPlugins.md rename to ui/v2.5/src/docs/en/Manual/EmbeddedPlugins.md diff --git a/ui/v2.5/src/docs/en/ExternalPlugins.md b/ui/v2.5/src/docs/en/Manual/ExternalPlugins.md similarity index 100% rename from ui/v2.5/src/docs/en/ExternalPlugins.md rename to ui/v2.5/src/docs/en/Manual/ExternalPlugins.md diff --git a/ui/v2.5/src/docs/en/Galleries.md b/ui/v2.5/src/docs/en/Manual/Galleries.md similarity index 100% rename from ui/v2.5/src/docs/en/Galleries.md rename to ui/v2.5/src/docs/en/Manual/Galleries.md diff --git a/ui/v2.5/src/docs/en/Help.md b/ui/v2.5/src/docs/en/Manual/Help.md similarity index 100% rename from ui/v2.5/src/docs/en/Help.md rename to ui/v2.5/src/docs/en/Manual/Help.md diff --git a/ui/v2.5/src/docs/en/Identify.md b/ui/v2.5/src/docs/en/Manual/Identify.md similarity index 100% rename from ui/v2.5/src/docs/en/Identify.md rename to ui/v2.5/src/docs/en/Manual/Identify.md diff --git a/ui/v2.5/src/docs/en/Interactive.md b/ui/v2.5/src/docs/en/Manual/Interactive.md similarity index 100% rename from ui/v2.5/src/docs/en/Interactive.md rename to ui/v2.5/src/docs/en/Manual/Interactive.md diff --git a/ui/v2.5/src/docs/en/Interface.md b/ui/v2.5/src/docs/en/Manual/Interface.md similarity index 100% rename from ui/v2.5/src/docs/en/Interface.md rename to ui/v2.5/src/docs/en/Manual/Interface.md diff --git a/ui/v2.5/src/docs/en/Introduction.md b/ui/v2.5/src/docs/en/Manual/Introduction.md similarity index 100% rename from ui/v2.5/src/docs/en/Introduction.md rename to ui/v2.5/src/docs/en/Manual/Introduction.md diff --git a/ui/v2.5/src/docs/en/JSONSpec.md b/ui/v2.5/src/docs/en/Manual/JSONSpec.md similarity index 100% rename from ui/v2.5/src/docs/en/JSONSpec.md rename to ui/v2.5/src/docs/en/Manual/JSONSpec.md diff --git a/ui/v2.5/src/docs/en/KeyboardShortcuts.md b/ui/v2.5/src/docs/en/Manual/KeyboardShortcuts.md similarity index 100% rename from ui/v2.5/src/docs/en/KeyboardShortcuts.md rename to ui/v2.5/src/docs/en/Manual/KeyboardShortcuts.md diff --git a/ui/v2.5/src/docs/en/Plugins.md b/ui/v2.5/src/docs/en/Manual/Plugins.md similarity index 100% rename from ui/v2.5/src/docs/en/Plugins.md rename to ui/v2.5/src/docs/en/Manual/Plugins.md diff --git a/ui/v2.5/src/docs/en/SceneFilenameParser.md b/ui/v2.5/src/docs/en/Manual/SceneFilenameParser.md similarity index 100% rename from ui/v2.5/src/docs/en/SceneFilenameParser.md rename to ui/v2.5/src/docs/en/Manual/SceneFilenameParser.md diff --git a/ui/v2.5/src/docs/en/ScraperDevelopment.md b/ui/v2.5/src/docs/en/Manual/ScraperDevelopment.md similarity index 100% rename from ui/v2.5/src/docs/en/ScraperDevelopment.md rename to ui/v2.5/src/docs/en/Manual/ScraperDevelopment.md diff --git a/ui/v2.5/src/docs/en/Scraping.md b/ui/v2.5/src/docs/en/Manual/Scraping.md similarity index 100% rename from ui/v2.5/src/docs/en/Scraping.md rename to ui/v2.5/src/docs/en/Manual/Scraping.md diff --git a/ui/v2.5/src/docs/en/Tagger.md b/ui/v2.5/src/docs/en/Manual/Tagger.md similarity index 100% rename from ui/v2.5/src/docs/en/Tagger.md rename to ui/v2.5/src/docs/en/Manual/Tagger.md diff --git a/ui/v2.5/src/docs/en/Tasks.md b/ui/v2.5/src/docs/en/Manual/Tasks.md similarity index 100% rename from ui/v2.5/src/docs/en/Tasks.md rename to ui/v2.5/src/docs/en/Manual/Tasks.md diff --git a/ui/v2.5/src/docs/en/MigrationNotes/index.ts b/ui/v2.5/src/docs/en/MigrationNotes/index.ts new file mode 100644 index 000000000..1b6eebbe0 --- /dev/null +++ b/ui/v2.5/src/docs/en/MigrationNotes/index.ts @@ -0,0 +1,9 @@ +// import migration32 from "./32.md"; + +// type Module = typeof migration32; + +// replace any with module once we add migration notes +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const migrationNotes: Record = { + // 32: migration31, +}; diff --git a/ui/v2.5/src/docs/en/ReleaseNotes/index.ts b/ui/v2.5/src/docs/en/ReleaseNotes/index.ts new file mode 100644 index 000000000..97da03d2f --- /dev/null +++ b/ui/v2.5/src/docs/en/ReleaseNotes/index.ts @@ -0,0 +1,16 @@ +import v0170 from "./v0170.md"; + +export type Module = typeof v0170; + +interface IReleaseNotes { + // handle should be in the form of YYYYMMDD + date: number; + content: Module; +} + +export const releaseNotes: IReleaseNotes[] = [ + { + date: 20220707, + content: v0170, + }, +]; diff --git a/ui/v2.5/src/docs/en/ReleaseNotes/v0170.md b/ui/v2.5/src/docs/en/ReleaseNotes/v0170.md new file mode 100644 index 000000000..5b461077d --- /dev/null +++ b/ui/v2.5/src/docs/en/ReleaseNotes/v0170.md @@ -0,0 +1 @@ +* Changelog has been moved from the stats page to a section in the Settings page. \ No newline at end of file diff --git a/ui/v2.5/src/index.scss b/ui/v2.5/src/index.scss index 1e122c07c..4735aa70b 100755 --- a/ui/v2.5/src/index.scss +++ b/ui/v2.5/src/index.scss @@ -14,6 +14,7 @@ @import "src/components/SceneFilenameParser/styles.scss"; @import "src/components/ScenePlayer/styles.scss"; @import "src/components/Settings/styles.scss"; +@import "src/components/Setup/styles.scss"; @import "src/components/Studios/styles.scss"; @import "src/components/Shared/styles.scss"; @import "src/components/Tags/styles.scss"; diff --git a/ui/v2.5/src/locales/en-GB.json b/ui/v2.5/src/locales/en-GB.json index f3faa50cb..a74f4f996 100644 --- a/ui/v2.5/src/locales/en-GB.json +++ b/ui/v2.5/src/locales/en-GB.json @@ -189,6 +189,7 @@ }, "categories": { "about": "About", + "changelog": "Changelog", "interface": "Interface", "logs": "Logs", "metadata_providers": "Metadata Providers", @@ -604,6 +605,7 @@ "edit_entity_title": "Edit {count, plural, one {{singularEntity}} other {{pluralEntity}}}", "export_include_related_objects": "Include related objects in export", "export_title": "Export", + "dont_show_until_updated": "Don't show until next update", "lightbox": { "delay": "Delay (Sec)", "display_mode": { @@ -870,6 +872,7 @@ "rating": "Rating", "recently_added_objects": "Recently Added {objects}", "recently_released_objects": "Recently Released {objects}", + "release_notes": "Release Notes", "resolution": "Resolution", "scene": "Scene", "sceneTagger": "Scene Tagger", @@ -919,9 +922,10 @@ "migration_failed_error": "The following error was encountered while migrating the database:", "migration_failed_help": "Please make any necessary corrections and try again. Otherwise, raise a bug on the {githubLink} or seek help in the {discordLink}.", "migration_irreversible_warning": "The schema migration process is not reversible. Once the migration is performed, your database will be incompatible with previous versions of stash.", + "migration_notes": "Migration Notes", "migration_required": "Migration required", "perform_schema_migration": "Perform schema migration", - "schema_too_old": "Your current stash database is schema version {databaseSchema} and needs to be migrated to version {appSchema}. This version of Stash will not function without migrating the database." + "schema_too_old": "Your current stash database is schema version {databaseSchema} and needs to be migrated to version {appSchema}. This version of Stash will not function without migrating the database. If you do not wish to migrate, you will need to downgrade to a version that matches your database schema." }, "paths": { "database_filename_empty_for_default": "database filename (empty for default)",