Skip to content

Commit

Permalink
Import injectable stylesheets as URLs (#1220)
Browse files Browse the repository at this point in the history
  • Loading branch information
fregante committed Aug 31, 2021
1 parent a8aabb1 commit 4d46ac2
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 60 deletions.
19 changes: 4 additions & 15 deletions src/blocks/renderers/DataTableComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,27 +19,16 @@ import { DataTable as RawDataTable } from "primereact/datatable";
import { Column, ColumnProps } from "primereact/column";
import React from "react";

// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
const theme = require("!!raw-loader!primereact/resources/themes/saga-blue/theme.css?esModule=false")
.default;

// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
const primereact = require("!!raw-loader!primereact/resources/primereact.min.css?esModule=false")
.default;
import theme from "primereact/resources/themes/saga-blue/theme.css?loadAsUrl";
import primereact from "primereact/resources/primereact.min.css?loadAsUrl";

const DataTableComponent: React.FunctionComponent<{
columns: ColumnProps[];
rows: Array<Record<string, unknown>>;
}> = ({ columns, rows }) => (
<React.Fragment>
<style
type="text/css"
dangerouslySetInnerHTML={{ __html: theme.toString() }}
/>
<style
type="text/css"
dangerouslySetInnerHTML={{ __html: primereact.toString() }}
/>
<link rel="stylesheet" href={theme} />
<link rel="stylesheet" href={primereact} />
<RawDataTable value={rows}>
{columns.map((column) => (
<Column key={column.field} {...column} />
Expand Down
32 changes: 9 additions & 23 deletions src/blocks/renderers/PropertyTree.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,33 +19,19 @@ import { TreeTable } from "primereact/treetable";
import { Column } from "primereact/column";
import React from "react";

// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
const theme = require("!!raw-loader!primereact/resources/themes/saga-blue/theme.css?esModule=false")
.default;
import theme from "primereact/resources/themes/saga-blue/theme.css?loadAsUrl";
import primereact from "primereact/resources/primereact.min.css?loadAsUrl";

// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
const primereact = require("!!raw-loader!primereact/resources/primereact.min.css?esModule=false")
.default;

// FIXME: figure out how to load the fonts, since the font URL in the file doesn't work with Chrome extensions
// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
const primeicons = require("!!raw-loader!primeicons/primeicons.css?esModule=false")
.default;
// FIXME: figure out how to load the fonts, since the font URL in the file doesn't
// work with Chrome extensions. Likely webpack needs to use css-loader to properly
// parse all the url() inside it.
import primeicons from "primeicons/primeicons.css?loadAsUrl";

const PropertyTree: React.FunctionComponent<{ value: any }> = ({ value }) => (
<React.Fragment>
<style
type="text/css"
dangerouslySetInnerHTML={{ __html: theme.toString() }}
/>
<style
type="text/css"
dangerouslySetInnerHTML={{ __html: primereact.toString() }}
/>
<style
type="text/css"
dangerouslySetInnerHTML={{ __html: primeicons.toString() }}
/>
<link rel="stylesheet" href={theme} />
<link rel="stylesheet" href={primereact} />
<link rel="stylesheet" href={primeicons} />
<TreeTable value={value}>
<Column field="name" header="Property" expander />
<Column field="value" header="Value" />
Expand Down
19 changes: 4 additions & 15 deletions src/blocks/renderers/customForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,8 @@ import { getRecord, setRecord } from "@/background/dataStore";
import { reportError } from "@/telemetry/logging";
import { notifyResult } from "@/contentScript/notify";

// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
const theme = require("!!raw-loader!bootstrap/dist/css/bootstrap.min.css?esModule=false")
.default;

// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
const custom = require("!!raw-loader!@/blocks/renderers/customForm.css?esModule=false")
.default;
import theme from "bootstrap/dist/css/bootstrap.min.css?loadAsUrl";
import custom from "@/blocks/renderers/customForm.css?loadAsUrl";

const CustomFormComponent: React.FunctionComponent<{
schema: Schema;
Expand All @@ -39,14 +34,8 @@ const CustomFormComponent: React.FunctionComponent<{
onSubmit: (values: JsonObject) => Promise<void>;
}> = ({ schema, uiSchema, formData, onSubmit }) => (
<div className="CustomForm">
<style
type="text/css"
dangerouslySetInnerHTML={{ __html: theme.toString() }}
/>
<style
type="text/css"
dangerouslySetInnerHTML={{ __html: custom.toString() }}
/>
<link rel="stylesheet" href={theme} />
<link rel="stylesheet" href={custom} />
<Form
schema={schema}
uiSchema={uiSchema}
Expand Down
9 changes: 2 additions & 7 deletions src/blocks/transformers/modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@ import { BlockArg, Schema } from "@/core";
import { uuidv4 } from "@/types/helpers";
import { BusinessError, CancelError } from "@/errors";

// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
const theme = require("!!raw-loader!bootstrap/dist/css/bootstrap.min.css?esModule=false")
.default;
import theme from "bootstrap/dist/css/bootstrap.min.css?loadAsUrl";

export class ModalTransformer extends Transformer {
constructor() {
Expand Down Expand Up @@ -81,10 +79,7 @@ export class ModalTransformer extends Transformer {
const id = `modal-${uuidv4()}`;
const form = (
<React.Fragment>
<style
type="text/css"
dangerouslySetInnerHTML={{ __html: theme.toString() }}
/>
<link rel="stylesheet" href={theme} />
<div className="modal-backdrop show"></div>
<div
id={id}
Expand Down
5 changes: 5 additions & 0 deletions src/importAssets.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ declare module "*.svg" {
export default CONTENT;
}

declare module "*?loadAsUrl" {
const CONTENT: string;
export default CONTENT;
}

declare module "*.txt" {
const CONTENT: string;
export default CONTENT;
Expand Down
1 change: 1 addition & 0 deletions webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,7 @@ module.exports = (env, options) =>
rules: [
{
test: /\.s?css$/,
resourceQuery: { not: [/loadAsUrl/] },
use: [
MiniCssExtractPlugin.loader,
"css-loader",
Expand Down
7 changes: 7 additions & 0 deletions webpack.sharedConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ const shared = {
test: /\.txt/,
type: "asset/source",
},
{
resourceQuery: /loadAsUrl/,
type: "asset/resource",
generator: {
filename: "css/[name][ext]",
},
},
],
},
};
Expand Down

0 comments on commit 4d46ac2

Please sign in to comment.