]> Untitled Git - lemmy-ui.git/commitdiff
Add option to set site default theme (fixes #559)
authorFelix Ableitner <me@nutomic.com>
Fri, 25 Feb 2022 13:35:17 +0000 (14:35 +0100)
committerFelix Ableitner <me@nutomic.com>
Fri, 25 Feb 2022 13:41:10 +0000 (14:41 +0100)
package.json
src/shared/components/app/app.tsx
src/shared/components/app/theme.tsx
src/shared/components/home/site-form.tsx
yarn.lock

index 1134d480195bea5c1b7b363e4469764f8fc09bd9..01d23c7aab529d447927c36bf30edc877bb1b561 100644 (file)
@@ -74,7 +74,7 @@
     "eslint-plugin-prettier": "^4.0.0",
     "husky": "^7.0.4",
     "import-sort-style-module": "^6.0.0",
-    "lemmy-js-client": "0.15.1-rc.1",
+    "lemmy-js-client": "0.15.4-rc.2",
     "lint-staged": "^12.1.2",
     "mini-css-extract-plugin": "^2.4.5",
     "node-fetch": "^2.6.1",
index bac634e372f1fdc324b97018f33620178017f298..52e47a1d53e413c95510a23d4aa3ef0e6cc3519d 100644 (file)
@@ -26,7 +26,7 @@ export class App extends Component<AppProps, any> {
       <>
         <Provider i18next={i18n}>
           <div>
-            <Theme myUserInfo={siteRes.my_user} />
+            <Theme myUserInfo={siteRes.my_user} site={siteRes.site_view.site} />
             {siteRes &&
               siteRes.site_view &&
               this.props.siteRes.site_view.site.icon && (
index bf5289b127dd9e03b11a2560e7a95b5d92a8d90d..e048046c63473847d27cdcec7d5adcc883c9633d 100644 (file)
@@ -1,9 +1,10 @@
 import { Component } from "inferno";
 import { Helmet } from "inferno-helmet";
-import { MyUserInfo } from "lemmy-js-client";
+import { MyUserInfo, Site } from "lemmy-js-client";
 
 interface Props {
   myUserInfo: MyUserInfo | undefined;
+  site: Site;
 }
 
 export class Theme extends Component<Props> {
@@ -20,22 +21,11 @@ export class Theme extends Component<Props> {
             href={`/static/assets/css/themes/${user.local_user_view.local_user.theme}.min.css`}
           />
         ) : (
-          [
-            <link
-              rel="stylesheet"
-              type="text/css"
-              href="/static/assets/css/themes/litely.min.css"
-              id="default-light"
-              media="(prefers-color-scheme: light)"
-            />,
-            <link
-              rel="stylesheet"
-              type="text/css"
-              href="/static/assets/css/themes/darkly.min.css"
-              id="default-dark"
-              media="(prefers-color-scheme: no-preference), (prefers-color-scheme: dark)"
-            />,
-          ]
+          <link
+            rel="stylesheet"
+            type="text/css"
+            href={`/static/assets/css/themes/${this.props.site.default_theme}.min.css`}
+          />
         )}
       </Helmet>
     );
index ba1ce3800594465cd191b651131efd76c2420d6c..d37d7129e4f7df2bb1917d95a62dddbecb1478e0 100644 (file)
@@ -3,7 +3,12 @@ import { Prompt } from "inferno-router";
 import { CreateSite, EditSite, Site } from "lemmy-js-client";
 import { i18n } from "../../i18next";
 import { WebSocketService } from "../../services";
-import { authField, capitalizeFirstLetter, wsClient } from "../../utils";
+import {
+  authField,
+  capitalizeFirstLetter,
+  themes,
+  wsClient,
+} from "../../utils";
 import { Spinner } from "../common/icon";
 import { ImageUploadForm } from "../common/image-upload-form";
 import { MarkdownTextArea } from "../common/markdown-textarea";
@@ -31,6 +36,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
       require_application: null,
       application_question: null,
       private_instance: null,
+      default_theme: null,
       auth: authField(),
     },
     loading: false,
@@ -66,6 +72,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
         require_application: site.require_application,
         application_question: site.application_question,
         private_instance: site.private_instance,
+        default_theme: site.default_theme,
         auth: authField(),
       };
     }
@@ -314,6 +321,27 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
               </div>
             </div>
           </div>
+          <div class="form-group row">
+            <div class="col-12">
+              <label
+                class="form-check-label"
+                htmlFor="create-site-default-theme"
+              >
+                {i18n.t("theme")}
+              </label>
+              <select
+                id="create-site-default-theme"
+                value={this.state.siteForm.default_theme}
+                onChange={linkEvent(this, this.handleSiteDefaultTheme)}
+                class="custom-select w-auto"
+              >
+                <option value="browser">{i18n.t("browser_default")}</option>
+                {themes.map(theme => (
+                  <option value={theme}>{theme}</option>
+                ))}
+              </select>
+            </div>
+          </div>
           <div class="form-group row">
             <div class="col-12">
               <div class="form-check">
@@ -321,7 +349,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
                   class="form-check-input"
                   id="create-site-private-instance"
                   type="checkbox"
-                  checked={this.state.siteForm.private_instance}
+                  value={this.state.siteForm.default_theme}
                   onChange={linkEvent(this, this.handleSitePrivateInstance)}
                 />
                 <label
@@ -434,6 +462,11 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
     i.setState(i.state);
   }
 
+  handleSiteDefaultTheme(i: SiteForm, event: any) {
+    i.state.siteForm.default_theme = event.target.value;
+    i.setState(i.state);
+  }
+
   handleCancel(i: SiteForm) {
     i.props.onCancel();
   }
index b787a30fe94a7f097e7c8cc43e789ec394aab448..fe0e7f2a092d832e9fd82eebf848711ff22a6170 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -4624,10 +4624,10 @@ lcid@^1.0.0:
   dependencies:
     invert-kv "^1.0.0"
 
-lemmy-js-client@0.15.1-rc.1:
-  version "0.15.1-rc.1"
-  resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.15.1-rc.1.tgz#9d914098eefc25834f077c4690d4e3e2ab4f2c57"
-  integrity sha512-rs80HTzwayt2EpjQ+ruQM82bZydjk9kZUUjZidYzwmy1FBkWpG5+OBnW3X6YQ5ebswiobL8HraNfnWMm0zqvjQ==
+lemmy-js-client@0.15.4-rc.2:
+  version "0.15.4-rc.2"
+  resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.15.4-rc.2.tgz#cee9115cc8ada3a6f480b595d797b474b9d051cc"
+  integrity sha512-+plQKqczw0mpnNYSfXRlM3ODH00b7jfH5hpaJAYMmQ0eaXHhKOoWqR8rpl3xXr3alkkhqQQ+lQPnMQO2ghe+WQ==
 
 levn@^0.4.1:
   version "0.4.1"