diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-copy-url/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-copy-url/readme.md
index f6ccc55e243..849011a9e5f 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-copy-url/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-copy-url/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| -------------------- | --------- | ----------- | -------- | ----------- |
-| `items` _(required)_ | -- | | `Item[]` | `undefined` |
+| `items` _(required)_ | `items` | | `Item[]` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-delete-items/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-delete-items/readme.md
index 477699e37ca..a0604642ee6 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-delete-items/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-delete-items/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| -------------------- | --------- | ----------- | -------- | ----------- |
-| `items` _(required)_ | -- | | `Item[]` | `undefined` |
+| `items` _(required)_ | `items` | | `Item[]` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-download-item/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-download-item/readme.md
index 963fdd64a81..01756846e3a 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-download-item/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-download-item/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| ------------------- | --------- | ----------- | ------ | ----------- |
-| `item` _(required)_ | -- | | `Item` | `undefined` |
+| `item` _(required)_ | `item` | | `Item` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-edit-item/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-edit-item/readme.md
index 2ff98b37fef..f5043879d58 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-edit-item/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-edit-item/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| ------------------- | --------- | ----------- | ------ | ----------- |
-| `item` _(required)_ | -- | | `Item` | `undefined` |
+| `item` _(required)_ | `item` | | `Item` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-move-items/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-move-items/readme.md
index e57064322c9..767de21a630 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-move-items/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-move-items/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| -------------------- | --------- | ----------- | -------- | ----------- |
-| `items` _(required)_ | -- | | `Item[]` | `undefined` |
+| `items` _(required)_ | `items` | | `Item[]` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-open-file/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-open-file/readme.md
index 7d84b9c7a34..b76b7330f31 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-open-file/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-open-file/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| ------------------- | --------- | ----------- | ------ | ----------- |
-| `item` _(required)_ | -- | | `Item` | `undefined` |
+| `item` _(required)_ | `item` | | `Item` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-unlink-items/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-unlink-items/readme.md
index 07d7551661d..2c44f28ee61 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-unlink-items/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/actions/dnn-action-unlink-items/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| -------------------- | --------- | ----------- | -------- | ----------- |
-| `items` _(required)_ | -- | | `Item[]` | `undefined` |
+| `items` _(required)_ | `items` | | `Item[]` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/context-menus/dnn-rm-file-context-menu/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/context-menus/dnn-rm-file-context-menu/readme.md
index 08369f798ed..64ad7d741f5 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/context-menus/dnn-rm-file-context-menu/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/context-menus/dnn-rm-file-context-menu/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| ------------------- | --------- | ---------------------------------- | ------ | ----------- |
-| `item` _(required)_ | -- | The item that triggered this menu. | `Item` | `undefined` |
+| `item` _(required)_ | `item` | The item that triggered this menu. | `Item` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/context-menus/dnn-rm-folder-context-menu/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/context-menus/dnn-rm-folder-context-menu/readme.md
index 54dcdbafe0d..23ab98517c0 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/context-menus/dnn-rm-folder-context-menu/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/context-menus/dnn-rm-folder-context-menu/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| ------------------- | --------- | ---------------------------------- | ------ | ----------- |
-| `item` _(required)_ | -- | The item that triggered this menu. | `Item` | `undefined` |
+| `item` _(required)_ | `item` | The item that triggered this menu. | `Item` | `undefined` |
## Dependencies
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-delete-items/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-delete-items/readme.md
index a3e59256013..acb9337ec2e 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-delete-items/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-delete-items/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| -------------------- | --------- | ---------------------------- | -------- | ----------- |
-| `items` _(required)_ | -- | The list of items to delete. | `Item[]` | `undefined` |
+| `items` _(required)_ | `items` | The list of items to delete. | `Item[]` | `undefined` |
## Events
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-folder-list-item/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-folder-list-item/readme.md
index 76fe233921f..79c13b49111 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-folder-list-item/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-folder-list-item/readme.md
@@ -10,9 +10,9 @@
| Property | Attribute | Description | Type | Default |
| ----------------------------- | ------------------ | ----------------------------------------------------- | ---------------- | ----------- |
| `expanded` | `expanded` | If true, this node will be expanded on load. | `boolean` | `false` |
-| `folder` _(required)_ | -- | The basic information about the folder | `FolderTreeItem` | `undefined` |
+| `folder` _(required)_ | `folder` | The basic information about the folder | `FolderTreeItem` | `undefined` |
| `parentFolderId` _(required)_ | `parent-folder-id` | The ID of the parent folder. | `number` | `undefined` |
-| `selectedFolder` | -- | Indicates if this item is the currently selected one. | `FolderTreeItem` | `undefined` |
+| `selectedFolder` | `selected-folder` | Indicates if this item is the currently selected one. | `FolderTreeItem` | `undefined` |
## Events
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-items-cardview/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-items-cardview/readme.md
index 89e02a812a0..66c6f4fa681 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-items-cardview/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-items-cardview/readme.md
@@ -7,9 +7,9 @@
## Properties
-| Property | Attribute | Description | Type | Default |
-| --------------------------- | --------- | -------------------------- | -------------------------- | ----------- |
-| `currentItems` _(required)_ | -- | The list of current items. | `GetFolderContentResponse` | `undefined` |
+| Property | Attribute | Description | Type | Default |
+| --------------------------- | --------------- | -------------------------- | -------------------------- | ----------- |
+| `currentItems` _(required)_ | `current-items` | The list of current items. | `GetFolderContentResponse` | `undefined` |
## Events
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-items-listview/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-items-listview/readme.md
index b8f95ffac59..ddc1a018a4c 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-items-listview/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-items-listview/readme.md
@@ -7,9 +7,9 @@
## Properties
-| Property | Attribute | Description | Type | Default |
-| --------------------------- | --------- | -------------------------- | -------------------------- | ----------- |
-| `currentItems` _(required)_ | -- | The list of current items. | `GetFolderContentResponse` | `undefined` |
+| Property | Attribute | Description | Type | Default |
+| --------------------------- | --------------- | -------------------------- | -------------------------- | ----------- |
+| `currentItems` _(required)_ | `current-items` | The list of current items. | `GetFolderContentResponse` | `undefined` |
## Events
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-move-items/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-move-items/readme.md
index 6f72a916156..f077e7c7261 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-move-items/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-move-items/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| -------------------- | --------- | ---------------------------- | -------- | ----------- |
-| `items` _(required)_ | -- | The list of items to delete. | `Item[]` | `undefined` |
+| `items` _(required)_ | `items` | The list of items to delete. | `Item[]` | `undefined` |
## Events
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-queued-file/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-queued-file/readme.md
index 483032f19cf..ba2072b65a3 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-queued-file/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-queued-file/readme.md
@@ -10,7 +10,7 @@
| Property | Attribute | Description | Type | Default |
| -------------------------------- | ---------------------- | ----------------------------------------------------- | --------- | ----------- |
| `extract` | `extract` | Whether to extract uploaded zip files. | `boolean` | `false` |
-| `file` _(required)_ | -- | The file to upload. | `File` | `undefined` |
+| `file` _(required)_ | `file` | The file to upload. | `File` | `undefined` |
| `filter` _(required)_ | `filter` | Optionally limit the file types that can be uploaded. | `string` | `undefined` |
| `maxUploadFileSize` _(required)_ | `max-upload-file-size` | The maximal allowed file upload size | `number` | `undefined` |
| `validationCode` _(required)_ | `validation-code` | The validation code to use for uploads. | `string` | `undefined` |
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-unlink-items/readme.md b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-unlink-items/readme.md
index 0deb00c7e14..2fb970d9344 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-unlink-items/readme.md
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-unlink-items/readme.md
@@ -9,7 +9,7 @@
| Property | Attribute | Description | Type | Default |
| -------------------- | --------- | ---------------------------- | -------- | ----------- |
-| `items` _(required)_ | -- | The list of items to delete. | `Item[]` | `undefined` |
+| `items` _(required)_ | `items` | The list of items to delete. | `Item[]` | `undefined` |
## Events
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintignore b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintignore
deleted file mode 100644
index 1982a14fe69..00000000000
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-src/components/contentTypeModal/fieldDefinitions/FileUpload/Dropzone.jsx
-/src/vendor/**
-/src/utils/masker.js
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintrc.js b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintrc.js
deleted file mode 100644
index f58f06318e0..00000000000
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintrc.js
+++ /dev/null
@@ -1,72 +0,0 @@
-module.exports = {
- "plugins": [
- "react",
- "spellcheck"
- ],
- "env": {
- "browser": true,
- "commonjs": true
- },
- "extends": ["eslint:recommended", "plugin:react/recommended"],
- "settings": {
- "react": {
- "version": "16"
- }
- },
- "parserOptions": {
- "ecmaFeatures": {
- "jsx": true,
- "arrowFunctions": true,
- "blockBindings": true,
- "classes": true,
- "defaultParams": true,
- "destructuring": true,
- "forOf": true,
- "generators": true,
- "modules": true,
- "objectLiteralComputedProperties": true,
- "regexUFlag": true,
- "regexYFlag": true,
- "spread": true,
- "superInFunctions": false,
- "templateStrings": true
- },
- "ecmaVersion": 2018,
- "sourceType": "module"
- },
- "globals": {
- "__": false,
- "Promise": false,
- "VERSION": false
- },
- "rules": {
- // "spellcheck/spell-checker": [1,
- // {
- // "comments": "true",
- // "strings": "true",
- // "identifiers": "true",
- // "skipWords": require("./.eslintskipwords"),
- // "skipIfMatch": [
- // "http://[^s]*",
- // "https://[^s]*",
- // "(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)" // CSS hex color
- // ]
- // }
- // ],
- "semi": "error",
- "no-var": "error",
- "quotes": ["warn", "double" ],
- "indent": ["warn", 4, {"SwitchCase": 1}],
- "no-unused-vars": "warn",
- "no-console": "warn",
- "keyword-spacing": "warn",
- "eqeqeq": "warn",
- "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
- "space-before-blocks": "warn",
- "no-multiple-empty-lines": "warn",
- "react/jsx-equals-spacing": ["warn", "never"],
- "react/prop-types": "warn",
- "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}],
- "no-useless-escape": "off"
- }
-};
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintskipwords.js b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintskipwords.js
deleted file mode 100644
index 5c74042f752..00000000000
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/.eslintskipwords.js
+++ /dev/null
@@ -1,131 +0,0 @@
-module.exports = [
- "dnn",
- "evoq",
- "eslint",
- "fetch-ie8",
- "react-dom",
- "lodash",
- "bool",
- "func",
- "dropdown",
- "globals",
- "init",
- "cors",
- "api",
- "integrations",
- "const",
- "dom",
- "stringify",
- "debounce",
- "debounced",
- "unmount",
- "ceil",
- "px",
- "rgba",
- "svg",
- "html",
- "src",
- "calc",
- "img",
- "jpg",
- "nowrap",
- "js",
- "dropzone",
- "ondropactivate",
- "ondragenter",
- "draggable",
- "ondrop",
- "ondragleave",
- "ondropdeactivate",
- "droppable",
- "onmove",
- "onend",
- "interactable",
- "webkit",
- "rect",
- "concat",
- "resize",
- "sortable",
- "socialpanelheader",
- "socialpanelbody",
- "asc",
- "dx",
- "dy",
- "num",
- "reactid",
- "currentcolor",
- "ui",
- "checkbox",
- "tooltip",
- "scrollbar",
- "unshift",
- "dragstart",
- "contenteditable",
- "addons",
- "tbody",
- "resizable",
- "resizemove",
- "resizestart",
- "resizeend",
- "resizing",
- "resized",
- "ondropmove",
- "moz",
- "evq",
- "btn",
- "addon",
- "substring",
- "jpeg",
- "gif",
- "pdf",
- "png",
- "ppt",
- "txt",
- "autocomplete",
- "utils",
- "js-htmlencode",
- "webpack",
- "undef",
- "analytics",
- "dataset",
- "checkmark",
- "li",
- "br",
- "localizations",
- "javascript",
- "ie",
- "na",
- "searchable",
- "clearable",
- "http",
- "decrement",
- "ok",
- "checkboxes",
- "ddmmyy",
- "mmddyy",
- "ddmmyyyy",
- "mmddyyyy",
- "yyyymmdd",
- "td",
- "th",
- "marketo",
- "salesforce",
- "captcha",
- "rgb",
- "sunday",
- "xxxx",
- "typeof",
- "popup",
- "ccc",
- "aaf",
- "dddd",
- "redux",
- "middleware",
- "dev",
- "util",
- "searchpanel",
- "uncollapse",
- "dev",
- "devtools",
- "ctrl"
-]
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/eslint.config.mjs b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/eslint.config.mjs
new file mode 100644
index 00000000000..2d0088e0971
--- /dev/null
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/eslint.config.mjs
@@ -0,0 +1,93 @@
+// @ts-check
+import eslintPluginReact from "eslint-plugin-react";
+import js from "@eslint/js";
+import globals from "globals";
+
+/** @type {import("eslint").Linter.Config[]} */
+const config = [
+ js.configs.recommended,
+ eslintPluginReact.configs.flat.recommended,
+ {
+ files: ["**/*.js", "**/*.jsx"],
+ languageOptions: {
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ arrowFunctions: true,
+ blockBindings: true,
+ classes: true,
+ defaultParams: true,
+ destructuring: true,
+ forOf: true,
+ generators: true,
+ modules: true,
+ objectLiteralComputedProperties: true,
+ regexUFlag: true,
+ regexYFlag: true,
+ spread: true,
+ superInFunctions: false,
+ templateStrings: true
+ },
+ ecmaVersion: 2018,
+ sourceType: "module",
+ },
+ globals: {
+ __: false,
+ Promise: false,
+ VERSION: false,
+ ...globals.browser,
+ }
+ }
+ },
+ {
+ ignores: [
+ "dist/",
+ "node_modules/",
+ ]
+ },
+ {
+ files: ["src/**/*.js", "src/**/*.jsx"],
+ languageOptions: {
+ globals: {
+ document: "readonly",
+ window: "readonly",
+ navigator: "readonly",
+ setTimeout: "readonly",
+ }
+ }
+ },
+ {
+ files: ["webpack.config.js"],
+ languageOptions: {
+ sourceType: "commonjs",
+ }
+ },
+ {
+ settings: {
+ react: {
+ version: "detect"
+ }
+ }
+ },
+ {
+ rules: {
+ "semi": "error",
+ "no-var": "error",
+ "quotes": ["warn", "double" ],
+ "indent": ["warn", 4, {"SwitchCase": 1}],
+ "no-unused-vars": "warn",
+ "no-console": "warn",
+ "keyword-spacing": "warn",
+ "eqeqeq": "warn",
+ "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
+ "space-before-blocks": "warn",
+ "no-multiple-empty-lines": "warn",
+ "react/jsx-equals-spacing": ["warn", "never"],
+ "react/prop-types": "warn",
+ "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}],
+ "no-useless-escape": "off",
+ },
+ }
+];
+
+export default config;
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json
index 43578543e23..4bca0465698 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json
@@ -23,11 +23,11 @@
"create-react-class": "^15.7.0",
"css-loader": "^7.1.2",
"es6-object-assign": "1.1.0",
- "eslint": "7.32.0",
- "eslint-plugin-react": "7.37.1",
- "eslint-plugin-spellcheck": "0.0.20",
- "eslint-webpack-plugin": "^4.2.0",
+ "eslint": "9.25.1",
+ "eslint-plugin-react": "7.37.5",
+ "eslint-webpack-plugin": "^5.0.1",
"file-loader": "3.0.1",
+ "globals": "^16.1.0",
"i18n-webpack-plugin": "1.0.0",
"less": "4.1.3",
"less-loader": "12.2.0",
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/EmailPanel/index.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/EmailPanel/index.jsx
index 4de8ff24cc3..4975180368a 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/EmailPanel/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/EmailPanel/index.jsx
@@ -25,7 +25,7 @@ class EmailPanel extends Component {
};
}
- componentWillMount() {
+ UNSAFE_componentWillMount() {
this.SetErrorState();
}
@@ -88,7 +88,7 @@ class EmailPanel extends Component {
props.onCloseEmailPanel();
}
- /* eslint-disable react/no-danger */
+
render() {
const {props, state} = this;
return (
@@ -149,11 +149,12 @@ class EmailPanel extends Component {
}
}
-EmailPanel.PropTypes = {
+EmailPanel.propTypes = {
label: PropTypes.string,
className: PropTypes.string,
collapsibleWidth: PropTypes.number,
collapsibleHeight: PropTypes.number,
+ dispatch: PropTypes.func.isRequired,
scrollAreaStyle: PropTypes.object,
isOpened: PropTypes.bool,
logIds: PropTypes.array,
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/LogItemRow/index.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/LogItemRow/index.jsx
index d5907d1f275..18cffb9a07f 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/LogItemRow/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/LogItemRow/index.jsx
@@ -20,7 +20,7 @@ class LogItemRow extends Component {
this.handleClick = this.handleClick.bind(this);
}
- componentWillReceiveProps() {
+ UNSAFE_componentWillReceiveProps() {
this.setState({});
}
@@ -141,6 +141,7 @@ LogItemRow.propTypes = {
selectedRowIds: PropTypes.array.isRequired,
excludedRowIds: PropTypes.array.isRequired,
cssClass: PropTypes.string,
+ dispatch: PropTypes.func.isRequired,
logId: PropTypes.string,
typeName: PropTypes.string,
createDate: PropTypes.string,
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/index.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/index.jsx
index 96ef4cf6011..7519915528f 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/AdminLog/index.jsx
@@ -43,7 +43,7 @@ class AdminLogPanelBody extends Component {
isHost = util.settings.isHost;
}
- componentWillMount() {
+ UNSAFE_componentWillMount() {
const {props} = this;
props.dispatch(LogActions.getPortalList(util.settings.isHost, (dataPortal) => {
let portalList = Object.assign([], dataPortal.Results);
@@ -212,7 +212,7 @@ class AdminLogPanelBody extends Component {
return
{tableHeaders}
;
}
- /* eslint-disable react/no-danger */
+
renderedLogList() {
const {props} = this;
return props.logList.map((term, index) => {
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/App.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/App.jsx
index 62759debafb..38ef51ba0b0 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/App.jsx
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/App.jsx
@@ -62,7 +62,7 @@ class App extends Component {
);
}
}
-App.PropTypes = {
+App.propTypes = {
dispatch: PropTypes.func.isRequired,
selectedPage: PropTypes.number,
selectedPageVisibleIndex: PropTypes.number
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingEditor/index.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingEditor/index.jsx
index 27a971b42d4..f25bbae73d8 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingEditor/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingEditor/index.jsx
@@ -34,7 +34,7 @@ class LogSettingEditor extends Component {
};
}
- componentWillMount() {
+ UNSAFE_componentWillMount() {
const {props} = this;
if (props.logTypeSettingId !== "") {
props.dispatch(LogSettingActions.getLogSettingById({
@@ -187,7 +187,7 @@ class LogSettingEditor extends Component {
}
}
- /* eslint-disable react/no-danger */
+
render() {
const portalList = this.props.portalList !== undefined && this.props.portalList.map(log => {
return {
@@ -270,7 +270,7 @@ class LogSettingEditor extends Component {
let children = [];
children.push(columnOne);
children.push(columnTwo);
- /* eslint-disable react/no-danger */
+
return (
{children}
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingRow/index.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingRow/index.jsx
index 129c6431fb1..05bfea54325 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingRow/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingRow/index.jsx
@@ -18,7 +18,7 @@ class LogSettingRow extends Component {
document.removeEventListener("click", this.handleClick);
this._isMounted = false;
}
- componentWillMount() {
+ UNSAFE_componentWillMount() {
let opened = (this.props.openId !== "" && this.props.id === this.props.openId);
this.setState({
opened
@@ -49,7 +49,7 @@ class LogSettingRow extends Component {
this.props.OpenCollapse(this.props.id);
}
}
- /* eslint-disable react/no-danger */
+
render() {
const {props} = this;
let opened = (this.props.openId !== "" && this.props.id === this.props.openId);
@@ -92,7 +92,8 @@ LogSettingRow.propTypes = {
id: PropTypes.string,
openId: PropTypes.string,
visible: PropTypes.bool,
- readOnly: PropTypes.bool
+ readOnly: PropTypes.bool,
+ children: PropTypes.bool,
};
LogSettingRow.defaultProps = {
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/index.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/index.jsx
index c76fde1c3eb..e31d929be83 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/index.jsx
@@ -27,7 +27,7 @@ class LogSettingsPanel extends Component {
canEdit = util.settings.isHost || util.settings.permissions.LOG_SETTINGS_EDIT;
}
- componentWillMount() {
+ UNSAFE_UNSAFE_componentWillMount() {
const {props} = this;
props.dispatch(LogSettingActions.getLogSettings());
if (canEdit) {
@@ -78,7 +78,7 @@ class LogSettingsPanel extends Component {
}
}
- /* eslint-disable react/no-danger */
+
renderedLogSettingList(logTypeOptions, portalOptions) {
let validLogSettingList = this.props.logSettingList.filter(logSetting => !!logSetting);
let i = 0;
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/globals/application.js b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/globals/application.js
index 4f4277a4414..ccf0b6958aa 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/globals/application.js
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/globals/application.js
@@ -1,19 +1,11 @@
import utilities from "../utils";
+import "../less/style.less";
const adminLogs = {
init() {
- // This setting is required and define the public path
- // to allow the web application to download assets on demand
- // eslint-disable-next-line no-undef
- // __webpack_public_path__ = options.publicPath;
let options = window.dnn.initAdminLogs();
-
utilities.init(options.utility);
utilities.moduleName = options.moduleName;
utilities.settings = options.settings;
-
- // delay the styles loading after the __webpack_public_path__ is set
- // this allows the fonts associated to be loaded properly in production
- require("../less/style.less");
},
dispatch() {
throw new Error("dispatch method needs to be overwritten from the Redux store");
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/reducers/logReducer.js b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/reducers/logReducer.js
index cb4d896e851..e11bced98ea 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/reducers/logReducer.js
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/reducers/logReducer.js
@@ -24,15 +24,17 @@ export default function logList(state = {
return { ...state,
logTypeList: action.data.logTypeList
};
- /*eslint-disable eqeqeq*/
+
case ActionTypes.SELECTED_ROW:
return {...state,
selectedRowIds: state.selectedRowIds.concat(action.data.rowId),
+ // eslint-disable-next-line eqeqeq
excludedRowIds: state.excludedRowIds.filter((id) => id != action.data.rowId)
};
case ActionTypes.DESELECTED_ROW:
return {...state,
excludedRowIds: state.excludedRowIds.concat(action.data.rowId),
+ // eslint-disable-next-line eqeqeq
selectedRowIds: state.selectedRowIds.filter((id) => id != action.data.rowId)
};
case ActionTypes.SELECTED_ALL:
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/webpack.config.js
index 6dbc67291eb..47cc5409887 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/webpack.config.js
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/webpack.config.js
@@ -1,5 +1,5 @@
const webpack = require("webpack");
-const ESLintPlugin = require('eslint-webpack-plugin');
+const ESLintPlugin = require("eslint-webpack-plugin");
const packageJson = require("./package.json");
const path = require("path");
const settings = require("../../../settings.local.json");
diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/.eslintignore b/Dnn.AdminExperience/ClientSide/Bundle.Web/.eslintignore
deleted file mode 100644
index 6c03969d074..00000000000
--- a/Dnn.AdminExperience/ClientSide/Bundle.Web/.eslintignore
+++ /dev/null
@@ -1,4 +0,0 @@
-src/components/contentTypeModal/fieldDefinitions/FileUpload/Dropzone.jsx
-/src/vendor/**
-/src/utils/masker.js
-*dnn-react-common.min.js
diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/.eslintrc.js b/Dnn.AdminExperience/ClientSide/Bundle.Web/.eslintrc.js
deleted file mode 100644
index 3f6a551056b..00000000000
--- a/Dnn.AdminExperience/ClientSide/Bundle.Web/.eslintrc.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const pkg = require('./package.json')
-
-const reactVersion = () => {
- if (pkg.dependencies && pkg.dependencies.react) {
- return { version: pkg.dependencies.react.replace(/[^0-9.]/g, '') }
- }
- if (pkg.devDependencies && pkg.devDependencies.react) {
- return { version: pkg.devDependencies.react.replace(/[^0-9.]/g, '') }
- }
-}
-
-module.exports = {
- "plugins": [
- "react"
- ],
- "env": {
- "browser": true,
- "commonjs": true
- },
- "extends": ["eslint:recommended", "plugin:react/recommended"],
- "settings": {
- "react": {
- ...reactVersion()
- }
- },
- "parserOptions": {
- "ecmaFeatures": {
- "jsx": true,
- "arrowFunctions": true,
- "blockBindings": true,
- "classes": true,
- "defaultParams": true,
- "destructuring": true,
- "forOf": true,
- "generators": true,
- "modules": true,
- "objectLiteralComputedProperties": true,
- "regexUFlag": true,
- "regexYFlag": true,
- "spread": true,
- "superInFunctions": false,
- "templateStrings": true
- },
- "ecmaVersion": 2018,
- "sourceType": "module"
- },
- "globals": {
- "__": false,
- "Promise": false,
- "VERSION": false
- },
- "rules": {
- "semi": "error",
- "no-var": "error",
- "quotes": ["warn", "double" ],
- "indent": ["warn", 4, {"SwitchCase": 1}],
- "no-unused-vars": "warn",
- "no-console": "warn",
- "keyword-spacing": "warn",
- "eqeqeq": "warn",
- "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
- "space-before-blocks": "warn",
- "no-multiple-empty-lines": "warn",
- "react/jsx-equals-spacing": ["warn", "never"],
- "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}]
- }
-};
diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/eslint.config.mjs b/Dnn.AdminExperience/ClientSide/Bundle.Web/eslint.config.mjs
new file mode 100644
index 00000000000..3038444d7db
--- /dev/null
+++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/eslint.config.mjs
@@ -0,0 +1,93 @@
+// @ts-check
+import eslintPluginReact from "eslint-plugin-react";
+import js from "@eslint/js";
+import globals from "globals";
+
+/** @type {import("eslint").Linter.Config[]} */
+const config = [
+ js.configs.recommended,
+ eslintPluginReact.configs.flat.recommended,
+ {
+ files: ["**/*.js", "**/*.jsx"],
+ languageOptions: {
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ arrowFunctions: true,
+ blockBindings: true,
+ classes: true,
+ defaultParams: true,
+ destructuring: true,
+ forOf: true,
+ generators: true,
+ modules: true,
+ objectLiteralComputedProperties: true,
+ regexUFlag: true,
+ regexYFlag: true,
+ spread: true,
+ superInFunctions: false,
+ templateStrings: true
+ },
+ ecmaVersion: 2018,
+ sourceType: "module",
+ },
+ globals: {
+ __: false,
+ Promise: false,
+ VERSION: false,
+ ...globals.browser,
+ }
+ }
+ },
+ {
+ ignores: [
+ "dist/",
+ "node_modules/",
+ ]
+ },
+ {
+ files: ["src/**/*.js", "src/**/*.jsx"],
+ languageOptions: {
+ globals: {
+ document: "readonly",
+ window: "readonly",
+ navigator: "readonly",
+ setTimeout: "readonly",
+ }
+ }
+ },
+ {
+ files: ["webpack.config.js"],
+ languageOptions: {
+ sourceType: "commonjs",
+ }
+ },
+ {
+ settings: {
+ react: {
+ version: "detect"
+ }
+ }
+ },
+ {
+ rules: {
+ "semi": "error",
+ "no-var": "error",
+ "quotes": ["warn", "double" ],
+ "indent": ["warn", 4, {"SwitchCase": 1}],
+ "no-unused-vars": "warn",
+ "no-console": "warn",
+ "keyword-spacing": "warn",
+ "eqeqeq": "warn",
+ "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
+ "space-before-blocks": "warn",
+ "no-multiple-empty-lines": "warn",
+ "react/jsx-equals-spacing": ["warn", "never"],
+ "react/prop-types": "warn",
+ "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}],
+ "no-useless-escape": "off",
+ },
+ }
+];
+
+export default config;
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json
index 425e0701bca..3b8e96fd0e5 100644
--- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json
@@ -14,8 +14,6 @@
"@babel/plugin-proposal-object-rest-spread": "^7.20.7",
"@babel/preset-env": "^7.26.0",
"@babel/preset-react": "^7.25.9",
- "array.prototype.find": "2.2.3",
- "array.prototype.findindex": "2.2.1",
"babel-loader": "^8.3.0",
"babel-plugin-transform-object-assign": "6.22.0",
"babel-plugin-transform-object-rest-spread": "6.26.0",
@@ -24,13 +22,12 @@
"create-react-class": "^15.7.0",
"css-loader": "^7.1.2",
"dayjs": "^1.11.9",
- "es6-object-assign": "1.1.0",
"es6-promise": "4.2.8",
- "eslint": "7.32.0",
- "eslint-plugin-react": "7.37.1",
- "eslint-plugin-spellcheck": "0.0.20",
- "eslint-webpack-plugin": "^4.2.0",
+ "eslint": "9.25.1",
+ "eslint-plugin-react": "7.37.5",
+ "eslint-webpack-plugin": "^5.0.1",
"file-loader": "3.0.1",
+ "globals": "^16.1.0",
"json-loader": "^0.5.7",
"less": "4.1.3",
"less-loader": "12.2.0",
diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/src/components/BackTo/BackTo.jsx b/Dnn.AdminExperience/ClientSide/Bundle.Web/src/components/BackTo/BackTo.jsx
index df16377a196..3287ff607eb 100644
--- a/Dnn.AdminExperience/ClientSide/Bundle.Web/src/components/BackTo/BackTo.jsx
+++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/src/components/BackTo/BackTo.jsx
@@ -3,7 +3,7 @@ import React from "react";
import styles from "./style.module.less";
import { ArrowBack } from "@dnnsoftware/dnn-react-common";
-/* eslint-disable react/no-danger */
+
const BackToMain = ({onClick, label}) => {
return (
{req(filename)});
+ req.keys().forEach(filename => {req(filename);});
}
configure(loadStories, module);
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/.storybook/utils.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/.storybook/utils.js
index 299f1aa6fee..e818bd1510a 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/.storybook/utils.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/.storybook/utils.js
@@ -166,9 +166,9 @@ function getProductSKU() {
checkInit();
return settings.productSKU;
}
-function isPlatform(){
+function isPlatform() {
checkInit();
- return settings.productSKU.toLowerCase() === 'dnn';
+ return settings.productSKU.toLowerCase() === "dnn";
}
function getIsAdminHostSystemPage() {
checkInit();
@@ -184,19 +184,19 @@ function formatDate(dateValue, longformat) {
return "-";
}
- const localizedFormat = require('dayjs/plugin/localizedFormat');
+ const localizedFormat = require("dayjs/plugin/localizedFormat");
dayjs.extend(localizedFormat);
- require('dayjs/locale/' + utilities.getCulture().substring(0,2));
+ require("dayjs/locale/" + utilities.getCulture().substring(0,2));
return dayjs(dateValue).locale(utilities.getCulture().substring(0,2)).format(longformat === true ? "LLL" : "L");
}
-function getUserMode(){
+function getUserMode() {
return config.userMode;
}
const url = {
- appendQueryString: function(url, params){
+ appendQueryString: function (url, params) {
let urlParse = new UrlParse(url, true);
let newParams = Object.assign({}, urlParse.query, params);
- urlParse.set('query', newParams);
+ urlParse.set("query", newParams);
return urlParse.href;
}
};
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/PublishAll.ps1 b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/PublishAll.ps1
deleted file mode 100644
index b9712e20831..00000000000
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/PublishAll.ps1
+++ /dev/null
@@ -1,4 +0,0 @@
-# This script should only be run when releasing a new version to npm from VSTS.
-# Bump the version and publish
-npm version patch -m "Releasing version %s of the DNN React Common Library"
-npm publish --access public
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/babel.config.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/babel.config.js
new file mode 100644
index 00000000000..def8fac243f
--- /dev/null
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/babel.config.js
@@ -0,0 +1,11 @@
+module.exports = {
+ "presets": [
+ "@babel/preset-env",
+ "@babel/preset-react"
+ ],
+ "plugins": [
+ "@babel/plugin-transform-object-assign",
+ "@babel/plugin-proposal-object-rest-spread",
+ "react-hot-loader/babel"
+ ]
+};
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/dist.webpack.config.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/dist.webpack.config.js
index 5dac395747f..8cd892f471c 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/dist.webpack.config.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/dist.webpack.config.js
@@ -1,5 +1,5 @@
const webpack = require("webpack");
-const ESLintPlugin = require('eslint-webpack-plugin');
+const ESLintPlugin = require("eslint-webpack-plugin");
const path = require("path");
const packageJson = require("./package.json");
const nodeExternals = require("webpack-node-externals");
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/eslint.config.mjs b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/eslint.config.mjs
new file mode 100644
index 00000000000..b9447807ee5
--- /dev/null
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/eslint.config.mjs
@@ -0,0 +1,102 @@
+import { defineConfig } from "eslint/config";
+import react from "eslint-plugin-react";
+import _import from "eslint-plugin-import";
+import { fixupPluginRules } from "@eslint/compat";
+import babelParser from "@babel/eslint-parser";
+
+export default defineConfig([
+ {
+ ignores: ["dist/**", "node_modules/**"],
+ },
+ {
+ files: ["**/*.js", "**/*.jsx"],
+ plugins: {
+ react,
+ import: fixupPluginRules(_import),
+ },
+ languageOptions: {
+ parser: babelParser,
+ ecmaVersion: 2020,
+ sourceType: "module",
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ experimentalObjectRestSpread: true,
+ arrowFunctions: true,
+ blockBindings: true,
+ classes: true,
+ defaultParams: true,
+ destructuring: true,
+ forOf: true,
+ generators: true,
+ modules: true,
+ objectLiteralComputedProperties: true,
+ regexUFlag: true,
+ regexYFlag: true,
+ spread: true,
+ superInFunctions: false,
+ templateStrings: true,
+ },
+ },
+ },
+
+ settings: {
+ "import/resolver": {
+ node: {
+ extensions: [".js", ".jsx"],
+ },
+ },
+
+ react: {
+ createClass: "createReactClass",
+ pragma: "React",
+ version: "16.4.2",
+ },
+
+ propWrapperFunctions: ["forbidExtraProps"],
+ },
+
+ rules: {
+ semi: "error",
+ "no-var": "error",
+ quotes: ["warn", "double"],
+
+ indent: [
+ "warn",
+ 4,
+ {
+ SwitchCase: 1,
+ },
+ ],
+
+ "no-console": "warn",
+ "keyword-spacing": "warn",
+ eqeqeq: "warn",
+
+ "space-before-function-paren": [
+ "warn",
+ {
+ anonymous: "always",
+ named: "never",
+ },
+ ],
+
+ "space-before-blocks": "warn",
+ "no-multiple-empty-lines": "warn",
+ "react/jsx-equals-spacing": ["warn", "never"],
+
+ "id-match": [
+ "error",
+ "^([A-Za-z0-9_])+$",
+ {
+ properties: true,
+ },
+ ],
+
+ "import/named": 2,
+ "import/default": 2,
+ "react/no-deprecated": "error",
+ "no-dupe-class-members": "error",
+ },
+ },
+]);
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json
index 0e25d863d1f..301f669a265 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json
@@ -45,13 +45,15 @@
},
"devDependencies": {
"@babel/core": "^7.26.0",
+ "@babel/eslint-parser": "^7.27.1",
+ "@babel/eslint-plugin": "7.27.1",
"@babel/plugin-proposal-object-rest-spread": "^7.20.7",
"@babel/plugin-transform-object-assign": "^7.25.9",
"@babel/preset-env": "^7.26.0",
"@babel/preset-react": "^7.25.9",
+ "@eslint/compat": "^1.2.9",
"@storybook/addon-actions": "^8.3.6",
"@storybook/react": "^5.3.21",
- "babel-eslint": "^10.1.0",
"babel-loader": "^8.3.0",
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
"babel-polyfill": "6.26.0",
@@ -61,16 +63,14 @@
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.7",
"enzyme-to-json": "^3.6.2",
- "eslint": "^7.32.0",
- "eslint-import-resolver-node": "^0.3.7",
- "eslint-import-resolver-webpack": "^0.13.2",
- "eslint-plugin-babel": "^5.3.1",
+ "eslint": "^9.25.1",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-import-resolver-webpack": "^0.13.10",
"eslint-plugin-filenames": "^1.3.2",
- "eslint-plugin-import": "^2.27.5",
- "eslint-plugin-jest": "^22.21.0",
- "eslint-plugin-react": "7.37.1",
- "eslint-plugin-spellcheck": "0.0.20",
- "eslint-webpack-plugin": "^4.2.0",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-jest": "^28.11.0",
+ "eslint-plugin-react": "7.37.5",
+ "eslint-webpack-plugin": "^5.0.1",
"file-loader": "3.0.1",
"less": "4.1.3",
"less-loader": "12.2.0",
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/backtolink.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/backtolink.stories.js
index 8a6ade006be..436178a053d 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/backtolink.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/backtolink.stories.js
@@ -4,5 +4,5 @@ import { action } from "@storybook/addon-actions";
import BackToLink from "./index";
storiesOf("BackToLink", module).add("with text", () => (
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/index.jsx
index d31b193e855..8b22c12041d 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/index.jsx
@@ -3,7 +3,7 @@ import PropTypes from "prop-types";
import { ArrowBack } from "../SvgIcons";
import "./style.less";
-/*eslint-disable react/no-danger*/
+
const BackToLink = ({text, children, className, onClick, style, arrowStyle}) => {
return (
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Button/button.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Button/button.stories.js
index 80760093f22..5505f36fd28 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Button/button.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Button/button.stories.js
@@ -4,5 +4,5 @@ import { action } from "@storybook/addon-actions";
import Button from "../Button";
storiesOf("Button", module).add("with text", () => (
- Hello Button
+ Hello Button
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Checkbox/checkbox.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Checkbox/checkbox.stories.js
index 0f4e0bb7117..6dc114cbda1 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Checkbox/checkbox.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Checkbox/checkbox.stories.js
@@ -4,23 +4,22 @@ import { action } from "@storybook/addon-actions";
import Checkbox from "./index";
storiesOf("Checkbox", module).add("with text", () => (
-
+
));
storiesOf("Checkbox", module).add("already checked", () => (
-
+
));
storiesOf("Checkbox", module).add("with label and tooltip", () => (
-
-))
-
+
+));
// -------- CHECKBOX AVAILABLE PROPS -------------
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Collapsible/collapsible.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Collapsible/collapsible.stories.js
index f61ab67134b..16014942e1f 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Collapsible/collapsible.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Collapsible/collapsible.stories.js
@@ -8,45 +8,45 @@ import MultiLineInputWithError from "../MultiLineInputWithError";
import Button from "../Button";
class MyCollapsible extends Component {
- constructor(props) {
- super(props);
- this.state = { opened: true };
- }
+ constructor(props) {
+ super(props);
+ this.state = { opened: true };
+ }
- render (){
- return (
-
-
-
-
-
this.setState({opened: true})}>Open
-
this.setState({opened: false})}>Close
-
- );
- }
+ render() {
+ return (
+
+
+
+
+
this.setState({opened: true})}>Open
+
this.setState({opened: false})}>Close
+
+ );
+ }
}
storiesOf("Collapsible", module).add("with text", () => (
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/CollapsibleRow/collapsiblerow.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/CollapsibleRow/collapsiblerow.stories.js
index 46f2ef29cb0..3090cf976b0 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/CollapsibleRow/collapsiblerow.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/CollapsibleRow/collapsiblerow.stories.js
@@ -4,14 +4,14 @@ import { action } from "@storybook/addon-actions";
import CollapsibleRow from "./index";
storiesOf("CollapsibleRow", module).add("with text", () => (
- Click Header To Expand }
- closeOnBlur={false}
- secondaryButtonText="Close"
- buttonsAreHidden={false}
- collapsed={true}
- onChange={action("changed")}
- >
-
Test Content
-
+
Click Header To Expand }
+ closeOnBlur={false}
+ secondaryButtonText="Close"
+ buttonsAreHidden={false}
+ collapsed={true}
+ onChange={action("changed")}
+ >
+ Test Content
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/contentloadwrapper.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/contentloadwrapper.stories.js
index a10cc233ffa..373fc3ad57a 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/contentloadwrapper.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/contentloadwrapper.stories.js
@@ -3,77 +3,77 @@ import { storiesOf } from "@storybook/react";
import ContentLoadWrapper from "./index";
import { TableEmptyState } from "../SvgIcons";
-class MyContentLoadWrapper extends Component{
- constructor(){
- super();
- this.state = { loaded: false };
- }
+class MyContentLoadWrapper extends Component {
+ constructor() {
+ super();
+ this.state = { loaded: false };
+ }
- componentDidMount(){
- setTimeout(function(){
- this.setState({ loaded: true });
- }.bind(this), 2000);
- }
+ componentDidMount() {
+ setTimeout(function () {
+ this.setState({ loaded: true });
+ }.bind(this), 2000);
+ }
- render(){
- return (
- }
- >
-
-
-
- Item 1
- Item 2
- Item 3
-
-
-
-
- );
- }
+ render() {
+ return (
+ }
+ >
+
+
+
+ Item 1
+ Item 2
+ Item 3
+
+
+
+
+ );
+ }
}
storiesOf("ContentLoadWrapper", module).add("with loading", () => (
- }
- >
-
-
Loading...
-
-
- Item 1
- Item 2
- Item 3
-
-
-
-
+ }
+ >
+
+
Loading...
+
+
+ Item 1
+ Item 2
+ Item 3
+
+
+
+
));
storiesOf("ContentLoadWrapper", module).add("with content", () => (
- }
- >
-
-
-
Content
-
+
}
+ >
+
+
+
Content
+
-
-
- Item 1
- Item 2
- Item 3
-
-
-
-
+
+
+ Item 1
+ Item 2
+ Item 3
+
+
+
+
));
storiesOf("ContentLoadWrapper", module).add("loaded after 2 seconds", () => (
-
+
));
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/index.jsx
index 1feeda0e031..0061ff2b6d1 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/index.jsx
@@ -80,7 +80,7 @@ export default class ContentLoadWrapper extends Component {
}
}
- /* eslint-disable react/no-danger */
+
render() {
let {percent} = this.state;
const className = "dnn-content-load-wrapper" + (this.props.loadComplete ? " complete" : "") + (this.props.loadError ? " upload-error" : "");
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/datepicker.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/datepicker.stories.js
index 01a4ee005b3..e70efe9b08b 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/datepicker.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/datepicker.stories.js
@@ -6,14 +6,14 @@ import Label from "../Label";
let startDate = new Date("December 17, 2018 03:24:00");
storiesOf("DatePicker", module).add("with content", () => (
-
-
- action("changed " + date.toString())}
- isDateRange={false}
- hasTimePicker={true}
- showClearDateButton={false}
- />
-
+
+
+ action("changed " + date.toString())}
+ isDateRange={false}
+ hasTimePicker={true}
+ showClearDateButton={false}
+ />
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/index.jsx
index f57dc43926a..62a018f9903 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/index.jsx
@@ -365,7 +365,7 @@ class DatePicker extends Component {
const showClearDates = !!this.props.isDateRange && this.props.showClearDates;
const clearButtonStyle = (this.state.Date.FirstDate || this.state.Date.SecondDate) ? clearButtonStyleVisible : clearButtonStyleInvisible;
- /* eslint-disable react/no-danger */
+
return
{showInput &&
{this.props.prependWith &&
{this.props.prependWith} }
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/timeZones.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/timeZones.js
index fbd3804e2a5..d48d2a2f9bb 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/timeZones.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/timeZones.js
@@ -1,4 +1,4 @@
-/* eslint-disable spellcheck/spell-checker */
+
const timeZones = [{
value: "Dateline Standard Time",
label: "(UTC-12:00) International Date Line West",
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/dropdown.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/dropdown.stories.js
index a03daeafcfc..040dd274064 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/dropdown.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/dropdown.stories.js
@@ -2,17 +2,17 @@ import React, { Component } from "react";
import { storiesOf } from "@storybook/react";
import Dropdown from "./index";
-class MyDropdown extends Component{
- constructor(){
+class MyDropdown extends Component {
+ constructor() {
super();
- this.state = { option: {} }
+ this.state = { option: {} };
}
- handleSelect(option){
+ handleSelect(option) {
this.setState( { option: option });
}
- render(){
+ render() {
return (
(
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/editablefield.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/editablefield.stories.js
index ab6a068329a..ad6a74fc505 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/editablefield.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/editablefield.stories.js
@@ -4,20 +4,20 @@ import { action } from "@storybook/addon-actions";
import EditableField from "./index";
storiesOf("EditableField", module).add("with single line input", () => (
-
+
));
storiesOf("EditableField", module).add("with multi-line input", () => (
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/index.jsx
index 9ba54decff6..0a36f6de8be 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/index.jsx
@@ -135,7 +135,7 @@ class EditableField extends Component {
}
}
- /* eslint-disable react/no-danger */
+
getEditButton() {
return
;
}
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FilePicker.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FilePicker.jsx
index d6196d936f6..28437cde1b9 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FilePicker.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FilePicker.jsx
@@ -71,7 +71,7 @@ export default class FilePicker extends Component {
getItem(isMatchSearch, child) {
if (isMatchSearch) {
- /* eslint-disable react/no-danger */
+
return
{child.data.value}
@@ -100,7 +100,7 @@ export default class FilePicker extends Component {
render() {
- /* eslint-disable react/no-danger */
+
const selectedFileText = this.props.selectedFile ? this.props.selectedFile.value : this.props.notSpecifiedText;
const files = this.getFiles();
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FolderPicker.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FolderPicker.jsx
index 2d03da3eb80..b830ecce5de 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FolderPicker.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FolderPicker.jsx
@@ -62,7 +62,7 @@ export default class FolderPicker extends Component {
}
render() {
- /* eslint-disable react/no-danger */
+
const selectedFolderText = this.props.selectedFolder ? this.props.selectedFolder.value : this.props.notSpecifiedText;
return this.node = node}>
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/Folders.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/Folders.jsx
index ee5214e1a4f..9e2fe9deeb8 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/Folders.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/Folders.jsx
@@ -54,7 +54,7 @@ export default class Folders extends Component {
return false;
}
const children = folder.children.map((child) => {
- /* eslint-disable react/no-danger */
+
const isOpen = this.state.openFolders.some(id => id === child.data.key);
const className = isOpen ? "open" : "";
return
@@ -70,7 +70,7 @@ export default class Folders extends Component {
}
render() {
- /* eslint-disable react/no-danger */
+
const folders = this.getFolders(this.props.folders);
return
{folders}
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/index.jsx
index 5f798832437..51492548247 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/index.jsx
@@ -210,7 +210,7 @@ export default class Browse extends Component {
}
render() {
- /* eslint-disable react/no-danger */
+
return
{this.props.folderText}
{
const svg = require(`!raw-loader!./img/${button.name}.svg`).default;
const isUpload = button.name === "upload";
- /* eslint-disable react/no-danger */
+
const accept = props.fileFormats.join(",");
return (
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/FolderSelector.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/FolderSelector.jsx
index 152b15aeda3..0fc256fc4d5 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/FolderSelector.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/FolderSelector.jsx
@@ -64,9 +64,9 @@ export default class FolderSelector extends Component {
}
getSearchIcon() {
- /* eslint-disable react/no-danger */
+
return (
);
- /* eslint-enable react/no-danger */
+
}
render() {
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/Folders.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/Folders.jsx
index 6a582fc8bd9..0c114c17022 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/Folders.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/Folders.jsx
@@ -54,9 +54,9 @@ export default class Folders extends Component {
}
getFolderIcon() {
- /* eslint-disable react/no-danger */
+
return (
);
- /* eslint-enable react/no-danger */
+
}
getFolders(folder) {
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/index.jsx
index dea370882a1..14e89108f50 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/index.jsx
@@ -3,7 +3,7 @@ import PropTypes from "prop-types";
import FolderSelector from "./FolderSelector";
function findKey(thisObject, id) {
- /* eslint-disable spellcheck/spell-checker */
+
let p, tRet;
for (p in thisObject) {
if (p === "data") {
@@ -18,7 +18,7 @@ function findKey(thisObject, id) {
}
}
return false;
- /* eslint-enable spellcheck/spell-checker */
+
}
export default class FolderPicker extends Component {
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/IconButton/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/IconButton/index.jsx
index 9a747db3f7b..be235af5ac7 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/IconButton/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/IconButton/index.jsx
@@ -111,7 +111,7 @@ export default class IconButton extends Component {
props.onClick(event);
}
- /* eslint-disable react/no-danger */
+
render() {
const {props} = this;
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/InputGroup/inputgroup.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/InputGroup/inputgroup.stories.js
index 00951b05cba..08dce648395 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/InputGroup/inputgroup.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/InputGroup/inputgroup.stories.js
@@ -5,14 +5,14 @@ import InputGroup from "./index";
import SingleLineInputWithError from "../SingleLineInputWithError";
storiesOf("InputGroup", module).add("with content", () => (
-
-
-
+
+
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Label/label.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Label/label.stories.js
index 59946c101c6..b528cc0fced 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Label/label.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Label/label.stories.js
@@ -56,9 +56,6 @@ storiesOf("Label", module).add("Reproduces issue", () =>
);
-
-
-
// ---------------- Label available props -------------------
//
// Label.propTypes = {
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal/index.jsx
index c71e1f1d8fb..3dffcd6ddaa 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal/index.jsx
@@ -47,7 +47,7 @@ class Modal extends Component {
}
});
}
- /*eslint-disable react/no-danger*/
+
render() {
const {props} = this;
const modalStyles = this.getModalStyles(props);
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/NumberSlider/numberslider.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/NumberSlider/numberslider.stories.js
index db2eec74a05..c117511c5c8 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/NumberSlider/numberslider.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/NumberSlider/numberslider.stories.js
@@ -4,11 +4,11 @@ import { action } from "@storybook/addon-actions";
import NumberSlider from "./index";
storiesOf("NumberSlider", module).add("with content", () => (
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PagePicker/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PagePicker/index.jsx
index 5c28c324408..48ca2a1bd21 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PagePicker/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PagePicker/index.jsx
@@ -286,7 +286,7 @@ class PagePicker extends Component {
return className;
}
- /* eslint-disable react/no-danger */
+
getChildItems(children, isCurrentOrDescendant) {
if (!children) {
return [];
@@ -556,7 +556,7 @@ class PagePicker extends Component {
}
//Multi Selection Methods Ends
- /* eslint-disable react/no-danger */
+
render() {
const {props, state} = this;
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Pager/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Pager/index.jsx
index 1ebd7c86444..1665f903279 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Pager/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Pager/index.jsx
@@ -227,7 +227,7 @@ class Pager extends Component {
/>
);
}
- /* eslint-disable react/no-danger */
+
renderIcon(OnClick, Type, Disabled) {
if (!Disabled) {
return
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/RadioButtons/radiobuttons.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/RadioButtons/radiobuttons.stories.js
index dc025e98f5e..dc88225298a 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/RadioButtons/radiobuttons.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/RadioButtons/radiobuttons.stories.js
@@ -3,26 +3,26 @@ import { storiesOf } from "@storybook/react";
import { action } from "@storybook/addon-actions";
import RadioButtons from "./index";
-class MyRadioButtons extends Component{
- constructor(){
- super();
- this.state = { value: 1 };
- }
+class MyRadioButtons extends Component {
+ constructor() {
+ super();
+ this.state = { value: 1 };
+ }
- render(){
- return (
- this.setState({value:value})}
- value={this.state.value}
- />
- );
- }
+ render() {
+ return (
+ this.setState({value:value})}
+ value={this.state.value}
+ />
+ );
+ }
}
storiesOf("RadioButtons", module).add("with content", () => (
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ScrollBar/scrollbar.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ScrollBar/scrollbar.stories.js
index 95326dc6aed..5ef40a58130 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ScrollBar/scrollbar.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ScrollBar/scrollbar.stories.js
@@ -4,9 +4,9 @@ import { action } from "@storybook/addon-actions";
import ScrollBar from "./index";
storiesOf("ScrollBar", module).add("with content", () => (
-
-
-
+
+
+
Condimentum faucibus fermentum ut habitant phasellus lacus natoque
curae; tempor eget interdum. Arcu lacus lobortis augue fames torquent
nunc blandit eros. Sollicitudin etiam suscipit ante condimentum
@@ -17,8 +17,8 @@ storiesOf("ScrollBar", module).add("with content", () => (
purus senectus risus dis risus duis. Dis risus imperdiet litora arcu
maecenas porta class. Taciti montes elit donec nibh. Vitae facilisis
ornare phasellus vel nostra. Mi duis molestie.
-
-
+
+
Molestie praesent aliquam metus et etiam vitae orci et. Platea tempus
ullamcorper venenatis lacinia nam tincidunt tristique lacus magnis massa
sit. Ornare vivamus natoque, inceptos consequat. Suscipit potenti aenean
@@ -28,8 +28,8 @@ storiesOf("ScrollBar", module).add("with content", () => (
sodales odio ultricies dignissim! Porta convallis venenatis, orci
faucibus leo bibendum cubilia natoque magnis. Pretium suspendisse
natoque sapien aliquam semper magna class mattis. At.
-
-
+
+
Viverra sodales torquent magna justo inceptos convallis nec. Cras
scelerisque interdum sapien? Fusce a felis dis aptent. Lobortis
lobortis, urna quisque urna. Sagittis per penatibus duis. Elementum sed
@@ -39,8 +39,8 @@ storiesOf("ScrollBar", module).add("with content", () => (
convallis lacinia eleifend sociis. Ultrices interdum mauris interdum,
tellus praesent praesent ac phasellus dictumst lacinia ultrices
consequat. Cras mi nostra nostra ligula? Viverra nunc.
-
-
+
+
Pretium sollicitudin ac nec feugiat augue mollis mattis ridiculus
imperdiet turpis. Diam enim sit iaculis pharetra, laoreet potenti
lobortis pharetra. Vehicula nostra aliquam interdum euismod potenti
@@ -51,8 +51,8 @@ storiesOf("ScrollBar", module).add("with content", () => (
molestie. Elementum ipsum laoreet quis netus magnis morbi vel quisque
mattis venenatis. Dictumst bibendum semper praesent hac nec ullamcorper
netus per commodo! Eget in sociis orci iaculis dictumst.
-
-
+
+
Etiam, lobortis quis sagittis. Nullam parturient habitant rhoncus
sollicitudin netus. Augue arcu ultricies condimentum id eleifend sapien
dictumst quam integer? Ultrices hendrerit placerat accumsan. Sodales
@@ -62,7 +62,7 @@ storiesOf("ScrollBar", module).add("with content", () => (
tincidunt donec elementum natoque vehicula molestie scelerisque
ultricies erat, cubilia gravida. Congue platea tincidunt magnis vehicula
massa dictumst ac dolor vulputate potenti habitant.
-
-
-
+
+
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SingleLineInputWithError/singlelineinputwitherror.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SingleLineInputWithError/singlelineinputwitherror.stories.js
index 08aeb2f604d..1b34eec6228 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SingleLineInputWithError/singlelineinputwitherror.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SingleLineInputWithError/singlelineinputwitherror.stories.js
@@ -4,12 +4,12 @@ import { action } from "@storybook/addon-actions";
import SingleLineInputWithError from "./index";
storiesOf("SingleLineInputWithError", module).add("with content", () => (
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Sortable/sortable.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Sortable/sortable.stories.js
index 89742990702..318af1684ed 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Sortable/sortable.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Sortable/sortable.stories.js
@@ -18,8 +18,8 @@ storiesOf("Sortable", module).add("in rows", () => (
onSort={action("Sorted")}
items={testProperties}
sortOnDrag={true}>
- {renderRows()}
-
+ {renderRows()}
+
));
@@ -68,9 +68,9 @@ function renderRows() {
});
}
-export default class MyComponent extends Component{
- render(){
- return(
+export default class MyComponent extends Component {
+ render() {
+ return (
{this.props.name}
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/index.jsx
index f71d9f63975..c6dc3668ece 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/index.jsx
@@ -1,4 +1,4 @@
-/* eslint-disable quotes */
+
const ActivityIcon = require("./svg/activity.svg").default;
const AddIcon = require("./svg/add.svg").default;
const AddCircleIcon = require("./svg/add_circle.svg").default;
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Switch/switch.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Switch/switch.stories.js
index 42ae40f2f0a..574eb7acf19 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Switch/switch.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Switch/switch.stories.js
@@ -4,49 +4,49 @@ import { action } from "@storybook/addon-actions";
import Switch from "./index";
class ControlledSwitch extends Component {
- constructor(props){
- super(props);
- this.state = { value: props.value ? props.value : false}
- }
+ constructor(props) {
+ super(props);
+ this.state = { value: props.value ? props.value : false};
+ }
- render(){
- return (
- this.setState({ value: value })}
+ labelPlacement="left"
+ value={this.state.value}
+ />
+ );
+ }
+}
+
+storiesOf("Switch", module).add("with off", () => (
+ this.setState({ value: value })}
+ label="Example Switch"
+ onChange={action("changed")}
labelPlacement="left"
- value={this.state.value}
- />
- );
- }
-}
-
-storiesOf("Switch", module).add("with off", () => (
-
+ />
));
storiesOf("Switch", module).add("with on", () => (
-
+
));
storiesOf("Switch", module).add("controlled switch", () => (
-
+
));
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tags/tags.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tags/tags.stories.js
index 0663d60fe3e..6e86f2b3c71 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tags/tags.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tags/tags.stories.js
@@ -4,8 +4,8 @@ import { action } from "@storybook/addon-actions";
import Tags from "./index";
storiesOf("Tags", module).add("with content", () => (
-
+
));
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/CustomIcon.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/CustomIcon.jsx
index 4981bae8bd5..14c90c75d9f 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/CustomIcon.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/CustomIcon.jsx
@@ -1,7 +1,7 @@
import React from "react";
import PropTypes from "prop-types";
-/* eslint-disable react/no-danger */
+
const CustomIcon = props => (
);
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/index.jsx
index 18f581a2129..234e19ecb32 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/index.jsx
@@ -18,7 +18,7 @@ const getTooltipText = function (messages) {
return "- " + messages.join(" - ");
};
-/*eslint-disable react/no-danger*/
+
function getIconComponent(type) {
switch (type) {
case "info": return InfoIcon;
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/tooltip.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/tooltip.stories.js
index 076d4a6f89d..25f53975a79 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/tooltip.stories.js
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/tooltip.stories.js
@@ -3,79 +3,79 @@ import { storiesOf } from "@storybook/react";
import Tooltip from "./index";
storiesOf("Tooltip", module).add("error with only required props", () => (
-
-
-
+
+
+
));
storiesOf("Tooltip", module).add("warning list on bottom", () => (
-
-
-
+
+
+
));
storiesOf("Tooltip", module).add("info with long message and maxWidth", () => (
-
-
-
+
+
+
));
storiesOf("Tooltip", module).add("global setting and positioned on the bottom", () => (
-
-
-
+
+
+
));
storiesOf("Tooltip", module).add("not rendered", () => (
-
+
));
class DynamicRenderedTooltip extends Component {
- constructor(){
- super();
- this.state = {rendered: false};
- }
+ constructor() {
+ super();
+ this.state = {rendered: false};
+ }
- handleToggleRender(){
- this.setState({rendered: !this.state.rendered});
- }
+ handleToggleRender() {
+ this.setState({rendered: !this.state.rendered});
+ }
- render(){
- return(
-
-
This tooltip should not be rendered until you click the button
-
Toggle render of the tootip
-
-
-
-
- );
- }
+ render() {
+ return (
+
+
This tooltip should not be rendered until you click the button
+
Toggle render of the tootip
+
+
+
+
+ );
+ }
}
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/TreeControlInteractor/icons/arrow-icon/_arrow_icon.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/TreeControlInteractor/icons/arrow-icon/_arrow_icon.jsx
index 33d3f81e79d..2da9f897a02 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/TreeControlInteractor/icons/arrow-icon/_arrow_icon.jsx
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/TreeControlInteractor/icons/arrow-icon/_arrow_icon.jsx
@@ -53,7 +53,7 @@ export class ArrowIcon extends Component {
render() {
- /* eslint-disable react/no-danger */
+
const marginTop = styles.margin({ top: -3 });
const padding = styles.padding({ all: 2 });
const baseStyles = style(this.direction);
@@ -67,7 +67,7 @@ export class ArrowIcon extends Component {
alt="arrow_icon"
onClick={this.onMouseDown.bind(this)} />
);
- /* eslint-disable react/no-danger */
+
}
}
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/.eslintignore b/Dnn.AdminExperience/ClientSide/Extensions.Web/.eslintignore
deleted file mode 100644
index 1982a14fe69..00000000000
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-src/components/contentTypeModal/fieldDefinitions/FileUpload/Dropzone.jsx
-/src/vendor/**
-/src/utils/masker.js
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/.eslintrc.js b/Dnn.AdminExperience/ClientSide/Extensions.Web/.eslintrc.js
deleted file mode 100644
index 9052cd56a5d..00000000000
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/.eslintrc.js
+++ /dev/null
@@ -1,43 +0,0 @@
-module.exports = {
- "plugins": [
- "react"
- ],
- "env": {
- "browser": true,
- "commonjs": true
- },
- "extends": ["eslint:recommended", "plugin:react/recommended"],
- "parserOptions": {
- "ecmaFeatures": {
- "jsx": true
- },
- "ecmaVersion": 2018,
- "sourceType": "module"
- },
- "settings": {
- "react":{
- "version": "16"
- }
- },
- "globals": {
- "__": false,
- "Promise": false,
- "VERSION": false
- },
- "rules": {
- "semi": "error",
- "no-var": "error",
- "quotes": ["warn", "double" ],
- "indent": ["warn", 4, {"SwitchCase": 1}],
- "no-unused-vars": "warn",
- "no-console": "warn",
- "keyword-spacing": "warn",
- "eqeqeq": "warn",
- "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
- "space-before-blocks": "warn",
- "no-multiple-empty-lines": "warn",
- "react/jsx-equals-spacing": ["warn", "never"],
- "react/prop-types": "warn",
- "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}]
- }
-};
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/eslint.config.mjs b/Dnn.AdminExperience/ClientSide/Extensions.Web/eslint.config.mjs
new file mode 100644
index 00000000000..5539b3f0bc1
--- /dev/null
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/eslint.config.mjs
@@ -0,0 +1,93 @@
+// @ts-check
+import eslintPluginReact from "eslint-plugin-react";
+import js from "@eslint/js";
+import globals from "globals";
+
+/** @type {import("eslint").Linter.Config[]} */
+const config = [
+ js.configs.recommended,
+ eslintPluginReact.configs.flat.recommended,
+ {
+ files: ["**/*.js", "**/*.jsx"],
+ languageOptions: {
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ arrowFunctions: true,
+ blockBindings: true,
+ classes: true,
+ defaultParams: true,
+ destructuring: true,
+ forOf: true,
+ generators: true,
+ modules: true,
+ objectLiteralComputedProperties: true,
+ regexUFlag: true,
+ regexYFlag: true,
+ spread: true,
+ superInFunctions: false,
+ templateStrings: true
+ },
+ ecmaVersion: 2018,
+ sourceType: "module",
+ },
+ globals: {
+ __: false,
+ Promise: false,
+ VERSION: false,
+ ...globals.browser,
+ }
+ }
+ },
+ {
+ ignores: [
+ "dist/",
+ "node_modules/",
+ ]
+ },
+ {
+ files: ["src/**/*.js", "src/**/*.jsx"],
+ languageOptions: {
+ globals: {
+ document: "readonly",
+ window: "readonly",
+ navigator: "readonly",
+ setTimeout: "readonly",
+ }
+ }
+ },
+ {
+ files: ["webpack.config.js"],
+ languageOptions: {
+ sourceType: "commonjs",
+ }
+ },
+ {
+ settings: {
+ react: {
+ version: "detect"
+ }
+ }
+ },
+ {
+ rules: {
+ "semi": "error",
+ "no-var": "error",
+ "quotes": ["warn", "double" ],
+ "indent": ["warn", 4, {"SwitchCase": 1}],
+ "no-unused-vars": "warn",
+ "no-console": "warn",
+ "keyword-spacing": "warn",
+ "eqeqeq": "warn",
+ "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
+ "space-before-blocks": "warn",
+ "no-multiple-empty-lines": "warn",
+ "react/jsx-equals-spacing": ["warn", "never"],
+ "react/prop-types": "warn",
+ "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}],
+ "no-useless-escape": "off",
+ },
+ }
+];
+
+export default config;
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json
index c3ed039066e..489b6169ba9 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json
@@ -6,7 +6,8 @@
"build": "set NODE_ENV=production&&webpack --mode production",
"debug": "set NODE_ENV=debug&&webpack --mode production",
"watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch",
- "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer"
+ "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer",
+ "lint": "eslint --fix"
},
"devDependencies": {
"@babel/core": "^7.26.0",
@@ -20,11 +21,11 @@
"babel-polyfill": "6.26.0",
"create-react-class": "^15.7.0",
"css-loader": "^7.1.2",
- "eslint": "7.32.0",
- "eslint-plugin-react": "7.37.1",
- "eslint-plugin-spellcheck": "0.0.20",
- "eslint-webpack-plugin": "^4.2.0",
+ "eslint": "9.25.1",
+ "eslint-plugin-react": "7.37.5",
+ "eslint-webpack-plugin": "^5.0.1",
"file-loader": "3.0.1",
+ "globals": "^16.1.0",
"less": "4.1.3",
"less-loader": "12.2.0",
"prop-types": "^15.8.1",
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/common/ExtensionColumnSizes.js b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/common/ExtensionColumnSizes.js
index ac7e9eeb97f..c29afd8fcfc 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/common/ExtensionColumnSizes.js
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/common/ExtensionColumnSizes.js
@@ -1 +1 @@
-module.exports = [4, 50, 11, 35];
\ No newline at end of file
+export default [4, 50, 11, 35];
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/common/ExtensionDetailRow/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/common/ExtensionDetailRow/index.jsx
index 3a6a524fd97..5b4a58177dd 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/common/ExtensionDetailRow/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/common/ExtensionDetailRow/index.jsx
@@ -6,7 +6,7 @@ import Localization from "localization";
import ColumnSizes from "../ExtensionColumnSizes";
import util from "utils";
-/* eslint-disable react/no-danger */
+
const ExtensionDetailRow = ({_package, type, onInstall, onDeploy, doingOperation}) => (
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/index.jsx
index d35eadb2aa7..e467fbab49f 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/index.jsx
@@ -99,12 +99,13 @@ class AvailableExtensions extends Component {
}
renderLoading() {
- /* eslint-disable react/no-danger */
+ /* eslint-disable no-undef */
return
{Localization.get("Loading")}
{Localization.get("Loading.Tooltip")}
;
+ /* eslint-enable no-undef */
}
render() {
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionColumnSizes.js b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionColumnSizes.js
index 5d8086492e1..340d609256e 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionColumnSizes.js
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionColumnSizes.js
@@ -1 +1 @@
-module.exports = [4, 53, 10, 10, 12, 11];
\ No newline at end of file
+export default [4, 53, 10, 10, 12, 11];
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionDetailRow/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionDetailRow/index.jsx
index 8b5da4f5f20..cdcee9c645f 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionDetailRow/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionDetailRow/index.jsx
@@ -35,7 +35,7 @@ class ExtensionDetailRow extends Component {
}
}
- /* eslint-disable react/no-danger */
+
render() {
const {props, state} = this;
return (
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/InUseModal/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/InUseModal/index.jsx
index c783cbb1866..64ea2197d02 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/InUseModal/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/InUseModal/index.jsx
@@ -117,7 +117,7 @@ class InUseModal extends Component {
}
}
- /* eslint-disable react/no-danger */
+
renderUsageDetail() {
const {props} = this;
if (props.tabUrls) {
@@ -129,7 +129,7 @@ class InUseModal extends Component {
}
}
- /* eslint-disable react/no-danger */
+
render() {
const {props, state} = this;
return (
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/index.jsx
index 841c5f8bd71..65815e049c6 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/index.jsx
@@ -69,12 +69,14 @@ class InstalledExtensions extends Component {
}
renderLoading() {
- /* eslint-disable react/no-danger */
+
+ /* eslint-disable no-undef */
return
{Localization.get("Loading")}
{Localization.get("Loading.Tooltip")}
;
+ /* eslint-enable no-undef */
}
render() {
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/AssignedSelector/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/AssignedSelector/index.jsx
index 10029883ad4..b1d5fced017 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/AssignedSelector/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/AssignedSelector/index.jsx
@@ -18,7 +18,7 @@ class AssignedSelector extends Component {
;
});
}
- /* eslint-disable react/no-danger */
+
render() {
const {props} = this;
const assignedPortals = this.getPortalList(props.assignedPortals, "assignedPortals");
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/DefinitionFields.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/DefinitionFields.jsx
index 20d663a52ba..0cd695a1c7b 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/DefinitionFields.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/DefinitionFields.jsx
@@ -7,7 +7,7 @@ class DefinitionFields extends Component {
constructor() {
super();
}
- /* eslint-disable react/no-danger */
+
render() {
const {props} = this;
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlFields.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlFields.jsx
index ed43faa3a21..6a2e4d5b21a 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlFields.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlFields.jsx
@@ -14,7 +14,7 @@ class ControlFields extends Component {
const { props } = this;
props.onChange(key, option.value);
}
- /* eslint-disable react/no-danger */
+
render() {
const {props} = this;
return (
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlRow.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlRow.jsx
index 0ed2b0602cb..b746ecfd2fd 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlRow.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlRow.jsx
@@ -12,7 +12,7 @@ class ControlRow extends Component {
isOpened: false
};
}
- /* eslint-disable react/no-danger */
+
render() {
const {props} = this;
return (
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/index.jsx
index 87250b75379..d86c72fe0e7 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/index.jsx
@@ -181,7 +181,7 @@ class Controls extends Component {
}));
}
- /* eslint-disable react/no-danger */
+
render() {
const {props, state} = this;
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/index.jsx
index 86f59a0f3cc..99d0f2afb25 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/index.jsx
@@ -14,7 +14,7 @@ class ModuleDefinitionRow extends Component {
isOpened: false
};
}
- /* eslint-disable react/no-danger */
+
render() {
const {props} = this;
return (
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/index.jsx
index a36cae4caeb..e01d96d1a3e 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/index.jsx
@@ -169,7 +169,7 @@ class ModuleDefinitions extends Component {
}));
});
}
- /* eslint-disable react/no-danger */
+
render() {
const {props, state} = this;
const moduleDefinitions = props.extensionBeingEdited.moduleDefinitions.value.map((moduleDefinition, index) => {
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/index.jsx
index ebe4a1d878c..f1a817e570c 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/index.jsx
@@ -82,7 +82,7 @@ class Module extends Component {
const { props } = this;
props.onChange(key, option.value);
}
- /* eslint-disable react/no-danger */
+
render() {
const {props} = this;
let { extensionBeingEdited } = props;
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/License/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/License/index.jsx
index a88fe07cfc8..b4ce6826438 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/License/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/License/index.jsx
@@ -17,7 +17,7 @@ class License extends Component {
render() {
const {props} = this;
const {value} = props;
- /* eslint-disable react/no-danger */
+
return (
{props.installationMode && {Localization.get("InstallExtension_License.Header")} }
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/ReleaseNotes/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/ReleaseNotes/index.jsx
index fc3b3998a24..e09f322a891 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/ReleaseNotes/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/ReleaseNotes/index.jsx
@@ -16,7 +16,7 @@ class ReleaseNotes extends Component {
render() {
const {props} = this;
const {value} = props;
- /* eslint-disable react/no-danger */
+
return (
{props.installationMode && {Localization.get("InstallExtension_ReleaseNotes.Header")} }
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/AlreadyInstalled.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/AlreadyInstalled.jsx
index a03a88f8496..0dedf7b73eb 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/AlreadyInstalled.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/AlreadyInstalled.jsx
@@ -9,7 +9,7 @@ export default class AlreadyInstalled extends Component {
render() {
const { props } = this;
- /* eslint-disable react/no-danger */
+
return
{this.props.fileName || "undefined"}
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/LogDisplay.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/LogDisplay.jsx
index 46ecdbe8f0d..dfbceee179f 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/LogDisplay.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/LogDisplay.jsx
@@ -16,7 +16,7 @@ const licenseBoxStyle = {
class LogDisplay extends Component {
render() {
const {props} = this;
- /* eslint-disable react/no-danger */
+
return (
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/UploadBar.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/UploadBar.jsx
index 3f566c9019e..5f4f372c7be 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/UploadBar.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/UploadBar.jsx
@@ -1,9 +1,11 @@
import React, { Component } from "react";
import PropTypes from "prop-types";
+/* eslint-disable no-undef */
const upload = require("!raw-loader!./img/upload.svg").default;
const checkmark = require("!raw-loader!./img/checkmark.svg").default;
const errorIcon = require("!raw-loader!./img/x.svg").default;
+/* eslint-enable no-undef */
export default class UploadBar extends Component {
constructor() {
@@ -52,7 +54,7 @@ export default class UploadBar extends Component {
render() {
const { props } = this;
- /* eslint-disable react/no-danger */
+
let percent = props.errorText ? 0 : this.state.percent;
let text = props.uploadComplete ? props.uploadCompleteText : props.uploadingText;
text = props.errorText ? props.errorText : text;
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/index.jsx
index 4fa64a5932c..eb636b341b6 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/index.jsx
@@ -151,12 +151,13 @@ export default class FileUpload extends Component {
}
render() {
/* eslint-disable quotes */
+ // eslint-disable-next-line no-undef
const svg = require(`!raw-loader!./img/upload.svg`).default;
const buttonsStyle = { width: 67 };
let className = "overlay" + (this.state.draggedOver ? " hover" : "");
- /* eslint-disable react/no-danger */
+
return
{((!this.state.uploading || this.state.uploadComplete) && !this.props.viewingLog) &&
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/InstallLog/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/InstallLog/index.jsx
index da279ae631b..65bbff4cf04 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/InstallLog/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/InstallLog/index.jsx
@@ -16,7 +16,7 @@ class EditExtension extends Component {
render() {
const {props} = this;
let errorCount = props.logs.filter((log) => { return log.Type === "Failure" || log.Type === "Error"; }).length;
- /* eslint-disable react/no-danger */
+
return (
0 ? " with-error" : "")}>
{Localization.get("InstallExtension_Logs.Header")}
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/globals/application.js b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/globals/application.js
index 3789c297109..02a784d40a8 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/globals/application.js
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/globals/application.js
@@ -3,13 +3,14 @@ const extensions = {
init() {
// This setting is required and define the public path
// to allow the web application to download assets on demand
- // eslint-disable-next-line no-undef
+
// __webpack_public_path__ = options.publicPath;
let options = window.dnn.initExtensions();
utilities.init(options);
// delay the styles loading after the __webpack_public_path__ is set
// this allows the fonts associated to be loaded properly in production
+ // eslint-disable-next-line no-undef
require("../less/style.less");
},
dispatch() {
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Extensions.Web/webpack.config.js
index 108be516f64..c99c39f03a2 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/webpack.config.js
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/webpack.config.js
@@ -1,5 +1,5 @@
const webpack = require("webpack");
-const ESLintPlugin = require('eslint-webpack-plugin');
+const ESLintPlugin = require("eslint-webpack-plugin");
const packageJson = require("./package.json");
const path = require("path");
const webpackExternals = require("@dnnsoftware/dnn-react-common/WebpackExternals");
diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/.eslintignore b/Dnn.AdminExperience/ClientSide/Licensing.Web/.eslintignore
deleted file mode 100644
index 1982a14fe69..00000000000
--- a/Dnn.AdminExperience/ClientSide/Licensing.Web/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-src/components/contentTypeModal/fieldDefinitions/FileUpload/Dropzone.jsx
-/src/vendor/**
-/src/utils/masker.js
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/.eslintrc.js b/Dnn.AdminExperience/ClientSide/Licensing.Web/.eslintrc.js
deleted file mode 100644
index 3aba0b72255..00000000000
--- a/Dnn.AdminExperience/ClientSide/Licensing.Web/.eslintrc.js
+++ /dev/null
@@ -1,42 +0,0 @@
-module.exports = {
- "plugins": [
- "react"
- ],
- "env": {
- "browser": true,
- "commonjs": true
- },
- "extends": ["eslint:recommended", "plugin:react/recommended"],
- "settings": {
- "react": {
- "version": "16"
- }
- },
- "parserOptions": {
- "ecmaFeatures": {
- "jsx": true,
- },
- "ecmaVersion": 2018,
- "sourceType": "module"
- },
- "globals": {
- "__": false,
- "Promise": false,
- "VERSION": false
- },
- "rules": {
- "semi": "error",
- "no-var": "error",
- "quotes": ["warn", "double" ],
- "indent": ["warn", 4, {"SwitchCase": 1}],
- "no-unused-vars": "warn",
- "no-console": "warn",
- "keyword-spacing": "warn",
- "eqeqeq": "warn",
- "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
- "space-before-blocks": "warn",
- "no-multiple-empty-lines": "warn",
- "react/jsx-equals-spacing": ["warn", "never"],
- "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}]
- }
-};
diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/eslint.config.mjs b/Dnn.AdminExperience/ClientSide/Licensing.Web/eslint.config.mjs
new file mode 100644
index 00000000000..d8b81adc805
--- /dev/null
+++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/eslint.config.mjs
@@ -0,0 +1,93 @@
+// @ts-check
+import eslintPluginReact from "eslint-plugin-react";
+import js from "@eslint/js";
+import globals from "globals";
+
+/** @type {import("eslint").Linter.Config[]} */
+const config = [
+ js.configs.recommended,
+ eslintPluginReact.configs.flat.recommended,
+ {
+ files: ["**/*.js", "**/*.jsx"],
+ languageOptions: {
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ arrowFunctions: true,
+ blockBindings: true,
+ classes: true,
+ defaultParams: true,
+ destructuring: true,
+ forOf: true,
+ generators: true,
+ modules: true,
+ objectLiteralComputedProperties: true,
+ regexUFlag: true,
+ regexYFlag: true,
+ spread: true,
+ superInFunctions: false,
+ templateStrings: true
+ },
+ ecmaVersion: 2018,
+ sourceType: "module",
+ },
+ globals: {
+ __: false,
+ Promise: false,
+ VERSION: false,
+ ...globals.browser,
+ }
+ }
+ },
+ {
+ ignores: [
+ "dist/",
+ "node_modules/",
+ ]
+ },
+ {
+ files: ["src/**/*.js", "src/**/*.jsx"],
+ languageOptions: {
+ globals: {
+ document: "readonly",
+ window: "readonly",
+ navigator: "readonly",
+ setTimeout: "readonly",
+ }
+ }
+ },
+ {
+ files: ["webpack.config.js"],
+ languageOptions: {
+ sourceType: "commonjs",
+ }
+ },
+ {
+ settings: {
+ react: {
+ version: "detect"
+ }
+ }
+ },
+ {
+ rules: {
+ "semi": "error",
+ "no-var": "error",
+ "quotes": ["warn", "double" ],
+ "indent": ["warn", 4, {"SwitchCase": 1}],
+ "no-unused-vars": "warn",
+ "no-console": "warn",
+ "keyword-spacing": "warn",
+ "eqeqeq": "warn",
+ "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
+ "space-before-blocks": "warn",
+ "no-multiple-empty-lines": "warn",
+ "react/jsx-equals-spacing": ["warn", "never"],
+ "react/prop-types": "warn",
+ "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}],
+ "no-useless-escape": "off",
+ },
+ }
+];
+
+export default config;
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json
index 060c46df510..a63615730b8 100644
--- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json
@@ -6,7 +6,8 @@
"build": "set NODE_ENV=production&&webpack --mode production",
"debug": "set NODE_ENV=debug&&webpack --mode production",
"watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch",
- "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer"
+ "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer",
+ "lint": "eslint --fix"
},
"devDependencies": {
"@babel/core": "^7.26.0",
@@ -22,11 +23,11 @@
"babel-polyfill": "6.26.0",
"css-loader": "^7.1.2",
"es6-object-assign": "1.1.0",
- "eslint": "7.32.0",
- "eslint-plugin-react": "7.37.1",
- "eslint-plugin-spellcheck": "0.0.20",
- "eslint-webpack-plugin": "^4.2.0",
+ "eslint": "9.25.1",
+ "eslint-plugin-react": "7.37.5",
+ "eslint-webpack-plugin": "^5.0.1",
"file-loader": "3.0.1",
+ "globals": "^16.1.0",
"less": "4.1.3",
"less-loader": "12.2.0",
"prop-types": "^15.8.1",
diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/src/components/platform/index.jsx b/Dnn.AdminExperience/ClientSide/Licensing.Web/src/components/platform/index.jsx
index 1e835f800c3..100d9adfb4a 100644
--- a/Dnn.AdminExperience/ClientSide/Licensing.Web/src/components/platform/index.jsx
+++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/src/components/platform/index.jsx
@@ -7,11 +7,10 @@ import {
import resx from "../../resources";
import styles from "./style.module.less";
-/*eslint-disable quotes*/
-const dnnTechnologyEditorialIcon = require(`!raw-loader!./../svg/dnn_technology_editorial.svg`).default;
-const githubIcon = require(`!raw-loader!./../svg/github.svg`).default;
-const dnnIcon = require(`!raw-loader!./../svg/dnn_logo_primary.svg`).default;
-const docsIcon = require(`!raw-loader!./../svg/dnn_docs_logo.svg`).default;
+import dnnTechnologyEditorialIcon from "./../svg/dnn_technology_editorial.svg?raw";
+import githubIcon from "./../svg/github.svg?raw";
+import dnnIcon from "./../svg/dnn_logo_primary.svg?raw";
+import docsIcon from "./../svg/dnn_docs_logo.svg?raw";
class Platform extends Component {
constructor() {
@@ -34,7 +33,7 @@ class Platform extends Component {
window.open("https://docs.dnncommunity.org", "_blank");
}
- /* eslint-disable react/no-danger */
+
renderLinks() {
return (
diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/src/globals/application.js b/Dnn.AdminExperience/ClientSide/Licensing.Web/src/globals/application.js
index e59451f35e2..ed14c84066d 100644
--- a/Dnn.AdminExperience/ClientSide/Licensing.Web/src/globals/application.js
+++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/src/globals/application.js
@@ -1,18 +1,10 @@
import utilities from "../utils";
+import "../less/style.less";
const boilerPlate = {
init() {
- // This setting is required and define the public path
- // to allow the web application to download assets on demand
- // eslint-disable-next-line no-undef
- // __webpack_public_path__ = options.publicPath;
let options = window.dnn.initLicensing();
-
utilities.init(options.utility);
utilities.moduleName = options.moduleName;
-
- // delay the styles loading after the __webpack_public_path__ is set
- // this allows the fonts associated to be loaded properly in production
- require("../less/style.less");
},
dispatch() {
throw new Error("dispatch method needs to be overwritten from the Redux store");
diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Licensing.Web/webpack.config.js
index 8f90f0480e9..7a8bc60dc91 100644
--- a/Dnn.AdminExperience/ClientSide/Licensing.Web/webpack.config.js
+++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/webpack.config.js
@@ -1,5 +1,5 @@
const webpack = require("webpack");
-const ESLintPlugin = require('eslint-webpack-plugin');
+const ESLintPlugin = require("eslint-webpack-plugin");
const packageJson = require("./package.json");
const path = require("path");
const settings = require("../../../settings.local.json");
@@ -79,6 +79,11 @@ module.exports = (env, argv) => {
loader: "url-loader?limit=8192",
},
},
+ {
+ test: /\.svg$/i,
+ resourceQuery: /raw/, // *.svg?raw
+ use: "raw-loader",
+ },
],
},
externals: webpackExternals,
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintignore b/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintignore
deleted file mode 100644
index 1982a14fe69..00000000000
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-src/components/contentTypeModal/fieldDefinitions/FileUpload/Dropzone.jsx
-/src/vendor/**
-/src/utils/masker.js
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintrc.js b/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintrc.js
deleted file mode 100644
index 93207667b0d..00000000000
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintrc.js
+++ /dev/null
@@ -1,62 +0,0 @@
-module.exports = {
- "parser": "babel-eslint",
- "plugins": [
- "react"
- ],
- "env": {
- "browser": true,
- "commonjs": true,
- "jest":true
- },
- "extends": ["eslint:recommended", "plugin:react/recommended"],
- "settings": {
- "react": {
- "version": "16"
- }
- },
- "parserOptions": {
- "ecmaFeatures": {
- "arrowFunctions": true,
- "blockBindings": true,
- "classes": true,
- "defaultParams": true,
- "destructuring": true,
- "forOf": true,
- "generators": true,
- "jsx": true,
- "modules": true,
- "objectLiteralComputedproperties": true,
- "regexUFlag": true,
- "regexYFlag": true,
- "spread": true,
- "superInFunctions": false,
- "templateStrings": true
- },
- "ecmaVersion": 2018,
- "sourceType": "module"
- },
- "globals": {
- "__": false,
- "Promise": false,
- "VERSION": false,
- "process": false,
- "describe":false,
- "it" : false,
- "expect" :false
- },
- "rules": {
- "semi": "error",
- "no-var": "error",
- "indent": ["warn", 4, {"SwitchCase": 1}],
- "no-unused-vars": "warn",
- "no-console": "warn",
- "keyword-spacing": "warn",
- "eqeqeq": ["warn", "smart"],
- "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
- "space-before-blocks": "warn",
- "no-multiple-empty-lines": "warn",
- "react/jsx-equals-spacing": ["warn", "never"],
- "react/prop-types": "warn",
- "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}]
- }
-};
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintskipwords.js b/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintskipwords.js
deleted file mode 100644
index 354d2cfc427..00000000000
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/.eslintskipwords.js
+++ /dev/null
@@ -1,156 +0,0 @@
-module.exports = [
- "dnn",
- "evoq",
- "eslint",
- "fetch-ie8",
- "react-dom",
- "lodash",
- "bool",
- "func",
- "dropdown",
- "globals",
- "init",
- "cors",
- "api",
- "integrations",
- "const",
- "dom",
- "stringify",
- "debounce",
- "debounced",
- "unmount",
- "ceil",
- "px",
- "rgba",
- "svg",
- "html",
- "src",
- "calc",
- "img",
- "jpg",
- "nowrap",
- "js",
- "dropzone",
- "ondropactivate",
- "ondragenter",
- "draggable",
- "ondrop",
- "ondragleave",
- "ondropdeactivate",
- "droppable",
- "onmove",
- "onend",
- "interactable",
- "webkit",
- "rect",
- "concat",
- "resize",
- "sortable",
- "socialpanelheader",
- "socialpanelbody",
- "asc",
- "dx",
- "dy",
- "num",
- "reactid",
- "currentcolor",
- "ui",
- "checkbox",
- "tooltip",
- "scrollbar",
- "unshift",
- "dragstart",
- "contenteditable",
- "addons",
- "tbody",
- "resizable",
- "resizemove",
- "resizestart",
- "resizeend",
- "resizing",
- "resized",
- "ondropmove",
- "moz",
- "evq",
- "btn",
- "addon",
- "substring",
- "jpeg",
- "gif",
- "pdf",
- "png",
- "ppt",
- "txt",
- "autocomplete",
- "utils",
- "js-htmlencode",
- "webpack",
- "undef",
- "analytics",
- "dataset",
- "checkmark",
- "li",
- "br",
- "localizations",
- "javascript",
- "ie",
- "na",
- "searchable",
- "clearable",
- "http",
- "decrement",
- "ok",
- "checkboxes",
- "ddmmyy",
- "mmddyy",
- "ddmmyyyy",
- "mmddyyyy",
- "yyyymmdd",
- "td",
- "th",
- "marketo",
- "salesforce",
- "captcha",
- "rgb",
- "sunday",
- "xxxx",
- "typeof",
- "popup",
- "ccc",
- "aaf",
- "dddd",
- "redux",
- "middleware",
- "dev",
- "util",
- "urls",
- "searchpanel",
- "uncollapse",
- "dev",
- "devtools",
- "ctrl",
- "ko",
- "resx",
- "params",
- "ctl",
- "seo",
- "sitemap",
- "ascx",
- "href",
- "iframe",
- "sys",
- "args",
- "cmd",
- "startswith",
- "selectable",
- "overridable",
- "guid",
- "treeview",
- "flyout",
- "Flyout",
- "interactor",
- "cloneDeep",
- "bmp",
- "xml",
- "filesystem"
-]
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/eslint.config.mjs b/Dnn.AdminExperience/ClientSide/Pages.Web/eslint.config.mjs
new file mode 100644
index 00000000000..b7096299754
--- /dev/null
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/eslint.config.mjs
@@ -0,0 +1,95 @@
+// @ts-check
+import eslintPluginReact from "eslint-plugin-react";
+import js from "@eslint/js";
+import globals from "globals";
+
+/** @type {import("eslint").Linter.Config[]} */
+const config = [
+ js.configs.recommended,
+ eslintPluginReact.configs.flat.recommended,
+ {
+ files: ["**/*.js", "**/*.jsx"],
+ languageOptions: {
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ arrowFunctions: true,
+ blockBindings: true,
+ classes: true,
+ defaultParams: true,
+ destructuring: true,
+ forOf: true,
+ generators: true,
+ modules: true,
+ objectLiteralComputedProperties: true,
+ regexUFlag: true,
+ regexYFlag: true,
+ spread: true,
+ superInFunctions: false,
+ templateStrings: true
+ },
+ ecmaVersion: 2018,
+ sourceType: "module",
+ },
+ globals: {
+ __: false,
+ Promise: false,
+ VERSION: false,
+ ...globals.browser,
+ process: false,
+ ...globals.jest,
+ }
+ }
+ },
+ {
+ ignores: [
+ "dist/",
+ "node_modules/",
+ ]
+ },
+ {
+ files: ["src/**/*.js", "src/**/*.jsx"],
+ languageOptions: {
+ globals: {
+ document: "readonly",
+ window: "readonly",
+ navigator: "readonly",
+ setTimeout: "readonly",
+ }
+ }
+ },
+ {
+ files: ["webpack.config.js"],
+ languageOptions: {
+ sourceType: "commonjs",
+ }
+ },
+ {
+ settings: {
+ react: {
+ version: "detect"
+ }
+ }
+ },
+ {
+ rules: {
+ "semi": "error",
+ "no-var": "error",
+ "quotes": ["warn", "double" ],
+ "indent": ["warn", 4, {"SwitchCase": 1}],
+ "no-unused-vars": "warn",
+ "no-console": "warn",
+ "keyword-spacing": "warn",
+ "eqeqeq": "warn",
+ "space-before-function-paren": ["warn", { "anonymous": "always", "named": "never" }],
+ "space-before-blocks": "warn",
+ "no-multiple-empty-lines": "warn",
+ "react/jsx-equals-spacing": ["warn", "never"],
+ "react/prop-types": "warn",
+ "id-match": ["error", "^([A-Za-z0-9_])+$", {"properties": true}],
+ "no-useless-escape": "off",
+ },
+ }
+];
+
+export default config;
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json
index 4a049b245ca..1a1596f553f 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json
@@ -39,12 +39,11 @@
"css-loader": "^7.1.2",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.7",
- "eslint": "^7.32.0",
- "eslint-import-resolver-webpack": "^0.13.2",
- "eslint-plugin-react": "7.37.1",
- "eslint-plugin-spellcheck": "0.0.20",
- "eslint-webpack-plugin": "^4.2.0",
+ "eslint": "^9.25.1",
+ "eslint-plugin-react": "7.37.5",
+ "eslint-webpack-plugin": "^5.0.1",
"file-loader": "3.0.1",
+ "globals": "^16.1.0",
"jest": "^28.1.3",
"less": "4.1.3",
"less-loader": "12.2.0",
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/actions/__test__/pageActions.test.js b/Dnn.AdminExperience/ClientSide/Pages.Web/src/actions/__test__/pageActions.test.js
index def8b0af110..12afcb8d1c4 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/actions/__test__/pageActions.test.js
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/actions/__test__/pageActions.test.js
@@ -1,28 +1,28 @@
-jest.mock('../../services/pageService');
-jest.mock('../../utils');
-import pageActions from '../pageActions';
+jest.mock("../../services/pageService");
+jest.mock("../../utils");
+import pageActions from "../pageActions";
import utils from "../../utils";
import PagesService from "../../services/pageService";
-describe('Dnn Page Actions', () => {
- it('Redirects when parent page is deleted and the child page is the current page', done => {
+describe("Dnn Page Actions", () => {
+ it("Redirects when parent page is deleted and the child page is the current page", done => {
// Arrange
const pageToDelete = {
tabId: 1,
hasChild: true
};
- const defaultUrl = 'http://localhost';
- const redirectUrl = 'http://localhost/test';
+ const defaultUrl = "http://localhost";
+ const redirectUrl = "http://localhost/test";
PagesService.deletePage.mockResolvedValue({});
PagesService.getPageHierarchy.mockResolvedValue([1, 2]);
utils.getCurrentPageId.mockReturnValue(2);
utils.getDefaultPageUrl.mockReturnValue(redirectUrl);
delete window.top.location;
window.top.location = new URL(defaultUrl);
- Object.defineProperty(window.top.location, 'href', {
+ Object.defineProperty(window.top.location, "href", {
set: (value) => {
// Assert
- expect(value).toBe(redirectUrl)
+ expect(value).toBe(redirectUrl);
done();
}
});
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/App.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/App.jsx
index e88be3690f6..48f6cafe9e5 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/App.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/App.jsx
@@ -480,7 +480,7 @@ class App extends Component {
}
onChangeParentId() {
- this.onChangePageField('oldParentId', this.props.selectedPage.parentId);
+ this.onChangePageField("oldParentId", this.props.selectedPage.parentId);
}
onAddMultiplePage() {
@@ -1140,8 +1140,8 @@ class App extends Component {
}
let { searchTerm, filterByPageType, filterByPublishStatus, filterByWorkflow, startDate, endDate, startAndEndDateDirty, tags } = this.state;
- const fullStartDate = `${startDate.getDate() < 10 ? `0` + startDate.getDate() : startDate.getDate()}/${((startDate.getMonth() + 1) < 10 ? `0` + (startDate.getMonth() + 1) : (startDate.getMonth() + 1))}/${startDate.getFullYear()} 00:00:00`;
- const fullEndDate = `${endDate.getDate() < 10 ? `0` + endDate.getDate() : endDate.getDate()}/${((endDate.getMonth() + 1) < 10 ? `0` + (endDate.getMonth() + 1) : (endDate.getMonth() + 1))}/${endDate.getFullYear()} 23:59:59`;
+ const fullStartDate = `${startDate.getDate() < 10 ? "0" + startDate.getDate() : startDate.getDate()}/${((startDate.getMonth() + 1) < 10 ? "0" + (startDate.getMonth() + 1) : (startDate.getMonth() + 1))}/${startDate.getFullYear()} 00:00:00`;
+ const fullEndDate = `${endDate.getDate() < 10 ? "0" + endDate.getDate() : endDate.getDate()}/${((endDate.getMonth() + 1) < 10 ? "0" + (endDate.getMonth() + 1) : (endDate.getMonth() + 1))}/${endDate.getFullYear()} 23:59:59`;
const searchDateRange = startAndEndDateDirty ? { publishDateStart: fullStartDate, publishDateEnd: fullEndDate } : {};
if (tags) {
@@ -1548,7 +1548,7 @@ class App extends Component {
const { inSearch } = this.state;
const isListPagesAllowed = securityService.canSeePagesList();
- /* eslint-disable react/no-danger */
+
return (
this.node = node} className="pages-app personaBar-mainContainer">
@@ -1679,7 +1679,8 @@ App.propTypes = {
getPageHierarchy: PropTypes.func.isRequired,
dirtyTemplate: PropTypes.bool,
dirtyCustomDetails: PropTypes.bool,
- onChangeCustomDetails: PropTypes.func
+ onChangeCustomDetails: PropTypes.func,
+ selectedCustomPageSettings: PropTypes.object,
};
function mapStateToProps(state) {
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Appearance/Card/Card.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Appearance/Card/Card.jsx
index 79994f7e5ea..668700a7c4a 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Appearance/Card/Card.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Appearance/Card/Card.jsx
@@ -35,7 +35,7 @@ class Card extends Component {
return
{image ? : this.getNoImageIcon() }
- {selected && {this.getCheckMarkIcon() } }
+ {selected && {this.getCheckMarkIcon() } }
{hoverText}
;
}
@@ -47,7 +47,7 @@ class Card extends Component {
return (
{this.getImageComponent() }
-
+
);
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/DropdownDayPicker/DropdownDayPicker.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/DropdownDayPicker/DropdownDayPicker.jsx
index bf009ff4c90..e991a034424 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/DropdownDayPicker/DropdownDayPicker.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/DropdownDayPicker/DropdownDayPicker.jsx
@@ -12,13 +12,13 @@ class DropdownDayPicker extends Component {
}
componentDidMount() {
- document.addEventListener('click', this.handleClick.bind(this), false);
+ document.addEventListener("click", this.handleClick.bind(this), false);
this._isMounted = true;
}
componentWillUnmount() {
- document.removeEventListener('click', this.handleClick.bind(this), false);
+ document.removeEventListener("click", this.handleClick.bind(this), false);
this._isMounted = false;
}
@@ -30,7 +30,7 @@ class DropdownDayPicker extends Component {
}
}
- /* eslint-disable react/no-danger */
+
render() {
const {dropdownIsActive, onDayClick, applyChanges, clearChanges, startDate, endDate, CalendarIcon, toggleDropdownCalendar} = this.props;
@@ -48,7 +48,7 @@ class DropdownDayPicker extends Component {
+ className={dropdownIsActive ? "calendar-dropdown expand-down" : `calendar-dropdown ${dropdownIsActive !== null ? "expand-up" : ""} ` } >
{
this.setState({
- userMode: 'edit'
+ userMode: "edit"
}, () => {
this.checkUrlType();
this.addEventListener();
@@ -127,7 +127,8 @@ class ModuleEdit extends Component {
ModuleEdit.propTypes = {
module: PropTypes.object.isRequired,
editType: PropTypes.string.isRequired,
- onUpdatedModuleSettings: PropTypes.func.isRequired
+ onUpdatedModuleSettings: PropTypes.func.isRequired,
+ selectedPage: PropTypes.object,
};
export default ModuleEdit;
\ No newline at end of file
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/ModuleRow/ModuleRow.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/ModuleRow/ModuleRow.jsx
index d3a9e183cfb..c69c8c8e069 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/ModuleRow/ModuleRow.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/ModuleRow/ModuleRow.jsx
@@ -20,7 +20,7 @@ class ModuleRow extends Component {
const { module, onDelete, onEditing, onSetting, isEditingModule, showCopySettings, onCopyChange } = this.props;
const editClassName = "extension-action" + (isEditingModule ? " selected" : "");
return (
- /* eslint-disable react/no-danger */
+
{showCopySettings &&
@@ -58,7 +58,7 @@ class ModuleRow extends Component {
}
- /* eslint-enable react/no-danger */
+
);
}
}
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/Modules.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/Modules.jsx
index 9ac571f4079..2e5c07eff6b 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/Modules.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/Modules.jsx
@@ -13,7 +13,7 @@ class Modules extends Component {
super();
this.state = {
- editType: ''
+ editType: ""
};
}
@@ -51,8 +51,8 @@ class Modules extends Component {
key={index}
module={module}
onDelete={this.onDeleteModule.bind(this)}
- onEditing={this.onEditingModule.bind(this, 'content')}
- onSetting={this.onEditingModule.bind(this, 'settings')}
+ onEditing={this.onEditingModule.bind(this, "content")}
+ onSetting={this.onEditingModule.bind(this, "settings")}
isEditingModule={isEditingModule}
onCopyChange={onModuleCopyChange}
showCopySettings={showCopySettings} />
@@ -66,7 +66,7 @@ class Modules extends Component {
const moduleRows = this.getModules();
const editingModule = modules.find(m => m.id === editingSettingModuleId);
return (
- /* eslint-disable react/no-danger */
+
@@ -87,7 +87,7 @@ class Modules extends Component {
{moduleRows}
{editingModule &&
@@ -99,7 +99,7 @@ class Modules extends Component {
/> }
- /* eslint-enable react/no-danger */
+
);
}
}
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/More/More.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/More/More.jsx
index 924df8bee92..5709657e6bb 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/More/More.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/More/More.jsx
@@ -58,7 +58,7 @@ class More extends Component {
}
render() {
- const { page, errors, onChangeField, cacheProviderList, workflowList } = this.props;
+ const { page, errors, onChangeField, cacheProviderList } = this.props;
const cacheProviderOptions = cacheProviderList &&
[{ value: null, label: Localization.get("None") },
...cacheProviderList.map(x => ({ value: x, label: x }))];
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageDetails/PageIcons/PageIcons.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageDetails/PageIcons/PageIcons.jsx
index aaa8915b45d..3f4a2a29bc2 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageDetails/PageIcons/PageIcons.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageDetails/PageIcons/PageIcons.jsx
@@ -1,9 +1,9 @@
import React, {Component} from "react";
import PropTypes from "prop-types";
import { FileUpload, GridSystem, GridCell, Label } from "@dnnsoftware/dnn-react-common";
-import Localization from '../../../localization';
-import util from '../../../utils';
-import styles from './styles.module.less';
+import Localization from "../../../localization";
+import util from "../../../utils";
+import styles from "./styles.module.less";
export default class PageIcons extends Component {
constructor(props) {
@@ -28,7 +28,7 @@ export default class PageIcons extends Component {
/>
this.node = node} dangerouslySetInnerHTML={{__html: html}} />; // eslint-disable-line react/no-danger
+ return this.node = node} dangerouslySetInnerHTML={{__html: html}} />;
}
}
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageHierarchy/pages.pageHierarchy.js b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageHierarchy/pages.pageHierarchy.js
index 3d45616a36f..90bfe864d85 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageHierarchy/pages.pageHierarchy.js
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageHierarchy/pages.pageHierarchy.js
@@ -1,11 +1,11 @@
-/* eslint-disable no-var, id-match, quotes, no-mixed-spaces-and-tabs, comma-dangle */ // errors
+/* eslint-disable no-var, id-match, quotes */ // errors
/* eslint-disable no-unused-vars, space-before-function-paren, indent, eqeqeq */ // warnings
/* global $, jQuery, ko */
window.dnn.pages = window.dnn.pages || {};
var OVER_TIME_TO_OPEN_PAGE_CHILDS;
- var pageHierarchyManager, pageHierarchyDefaultOptions;
+ var PageHierarchyManager, pageHierarchyDefaultOptions;
var draggingJqObj, pageDropped, dropOnDroppable, uiOnDragStart;
OVER_TIME_TO_OPEN_PAGE_CHILDS = 700;
@@ -22,12 +22,12 @@ window.dnn.pages = window.dnn.pages || {};
// preventing duplicates pages
dropOnDroppable = false;
- pageHierarchyManager = function(options) {
+ PageHierarchyManager = function(options) {
this.options = options;
};
- pageHierarchyManager.prototype = {
- constructor: pageHierarchyManager,
+ PageHierarchyManager.prototype = {
+ constructor: PageHierarchyManager,
_initialized: false,
@@ -1221,7 +1221,5 @@ window.dnn.pages = window.dnn.pages || {};
requestTimeout: 4000
};
-window.dnn.pages.pageHierarchyManager = new pageHierarchyManager(window.dnn.pages.pageHierarchyManagerOptions);
-module.exports = {
- pageHierarchyManager: window.dnn.pages.pageHierarchyManager
-};
+window.dnn.pages.pageHierarchyManager = new PageHierarchyManager(window.dnn.pages.pageHierarchyManagerOptions);
+export const pageHierarchyManager = window.dnn.pages.pageHierarchyManager;
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/Module.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/Module.jsx
index a15befdc1c0..4974f5c4c34 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/Module.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/Module.jsx
@@ -26,7 +26,7 @@ class Module extends Component {
this.onUpdateModules("IsLocalized", value);
}
- /* eslint-disable react/no-danger */
+
render() {
const {module} = this.props;
const {isDefault} = this.props;
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/PageLanguage.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/PageLanguage.jsx
index f3676b5f8a1..d000b80ad07 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/PageLanguage.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/PageLanguage.jsx
@@ -57,7 +57,7 @@ class PageLanguage extends Component {
}
onSettingPage(url, e) {
- let panelId = window.$('.socialpanel:visible').attr('id');
+ let panelId = window.$(".socialpanel:visible").attr("id");
utils.getUtilities().panelViewData(panelId, {tab: [0]});
window.parent.location = url;
@@ -80,7 +80,7 @@ class PageLanguage extends Component {
e.stopPropagation();
}
- /* eslint-disable react/no-danger */
+
render() {
const iconSrc = this.props.local && this.props.local.Icon ? this.props.local.Icon : "";
const cultureCode = this.props.local && this.props.local.CultureCode ? this.props.local.CultureCode : "";
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/PageLocalization.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/PageLocalization.jsx
index baf61dd5a9d..e8dd62eca26 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/PageLocalization.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/PageLocalization.jsx
@@ -57,7 +57,7 @@ class PageLocalization extends Component {
}).then(() => {
this.removeLocaleFromState(page.CultureCode);
if (page.TabId === utils.getCurrentPageId()) {
- let panelId = window.$('.socialpanel:visible').attr('id');
+ let panelId = window.$(".socialpanel:visible").attr("id");
utils.getUtilities().panelViewData(panelId, {tab: [0]});
window.top.location.href = utils.getDefaultPageUrl();
}
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchAdvanced.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchAdvanced.jsx
index b7e3fe21a4f..cd82205fd08 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchAdvanced.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchAdvanced.jsx
@@ -20,11 +20,11 @@ class SearchAdvanced extends Component {
});
}
- /*eslint-disable react/no-danger*/
+
render() {
return (
-
+
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchPageInput.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchPageInput.jsx
index 2f7d61a4118..f3b18cd444a 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchPageInput.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchPageInput.jsx
@@ -28,7 +28,7 @@ class SearchPageInput extends Component {
}
render() {
- /* eslint-disable react/no-danger */
+
return (
{this.props.inSearch ?
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResult.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResult.jsx
index 2c6f2e944cf..e97e9cd80e6 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResult.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResult.jsx
@@ -40,7 +40,7 @@ class SearchResult extends Component {
}
}
- /* eslint-disable react/no-danger */
+
render() {
const { searchResult, searchList } = this.props;
const loader =
;
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResultCard.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResultCard.jsx
index c057e61e805..ad321c65e87 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResultCard.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResultCard.jsx
@@ -1,7 +1,6 @@
import React, { Component } from "react";
import PropTypes from "prop-types";
import Localization from "../../localization";
-import utils from "../../utils";
import cloneDeep from "lodash/cloneDeep";
import securityService from "../../services/securityService";
import { TextOverflowWrapper, GridCell, SvgIcons } from "@dnnsoftware/dnn-react-common";
@@ -93,7 +92,7 @@ class SearchResultCard extends Component {
this.thumbRendered = true;
}
- /* eslint-disable react/no-danger */
+
render() {
let visibleMenus = [];
this.props.item.canViewPage && visibleMenus.push(
this.props.onViewPage(this.props.item)}>
);
@@ -113,7 +112,7 @@ class SearchResultCard extends Component {
{this.renderCustomComponent()}
-
+
this.onNameClick(this.props.item)}>
{tabPath}
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/EditUrl.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/EditUrl.jsx
index 323bf16e095..c54a09bea3f 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/EditUrl.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/EditUrl.jsx
@@ -78,6 +78,7 @@ class EditUrl extends Component {
if (
!this.state.hasChanges &&
url.siteAlias.Key !== primaryAliasId &&
+ // eslint-disable-next-line eqeqeq -- Could break as we have any for a type
url.id == null)
{
this.props.onChange("siteAlias", primaryAliasId);
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/Table.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/Table.jsx
index 0d39cf30f38..35ed9bd8f0e 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/Table.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/Table.jsx
@@ -47,7 +47,7 @@ class Table extends Component {
newFormOpened, onChange, editedUrl, siteAliases, primaryAliasId } = this.props;
const urlRows = this.getUrlRows(pageUrls);
- /* eslint-disable react/no-danger */
+
return (
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/UrlRow.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/UrlRow.jsx
index cc0b48da793..25aa76f69af 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/UrlRow.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/UrlRow.jsx
@@ -40,7 +40,7 @@ class UrlRow extends Component {
const opened = editedUrl && editedUrl.id === url.id;
return (
- /* eslint-disable react/no-danger */
+
{url.path}
@@ -73,7 +73,7 @@ class UrlRow extends Component {
primaryAliasId={primaryAliasId}
className="newUrlContainer" />}
- /* eslint-enable react/no-danger */
+
);
}
}
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/__test__/Breadcrumbs.test.js b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/__test__/Breadcrumbs.test.js
index 18a8ea65e2d..74a200aba51 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/__test__/Breadcrumbs.test.js
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/__test__/Breadcrumbs.test.js
@@ -81,7 +81,7 @@ describe("Breadcrumbs",()=>{
expect(countChildren).toBe(5);
});
- it('Click on start point breadcrumb',()=>{
+ it("Click on start point breadcrumb",()=>{
let onSelectedItemCallback = jest.fn();
let breadcrumbs = shallow(
);
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/PersonaBarPageTreeviewInteractor.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/PersonaBarPageTreeviewInteractor.jsx
index fe3a519103d..9393d5bf444 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/PersonaBarPageTreeviewInteractor.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/PersonaBarPageTreeviewInteractor.jsx
@@ -215,12 +215,12 @@ class PersonaBarPageTreeviewInteractor extends Component {
const userAgent = window.navigator.userAgent;
let type = "text/plain";
- if (userAgent.indexOf('Trident')) {
- type = 'Text';
+ if (userAgent.indexOf("Trident")) {
+ type = "Text";
}
- e.dataTransfer.setData ? e.dataTransfer.setData(type, 'node') : null;
+ e.dataTransfer.setData ? e.dataTransfer.setData(type, "node") : null;
const left = () => {
const img = new Image();
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarDraftPencilIcon.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarDraftPencilIcon.jsx
index 7cbc7e5c39b..932d8e8d4aa 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarDraftPencilIcon.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarDraftPencilIcon.jsx
@@ -6,7 +6,7 @@ import { SvgIcons } from "@dnnsoftware/dnn-react-common";
export default class PersonaBarPageIcon extends Component {
render_icon(hasUnpublishedChanges) {
- /*eslint-disable react/no-danger*/
+
switch (true) {
case hasUnpublishedChanges === true:
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarExpandCollapseIcon.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarExpandCollapseIcon.jsx
index c24109a8849..77631600e3c 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarExpandCollapseIcon.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarExpandCollapseIcon.jsx
@@ -7,7 +7,7 @@ export default class PersonaBarExpandCollapseIcon extends Component {
render() {
const {isOpen, item} = this.props;
- /*eslint-disable react/no-danger*/
+
return (
{isOpen ?
:
}
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarPageIcon.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarPageIcon.jsx
index 4d556fa6a9c..467420a65b9 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarPageIcon.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarPageIcon.jsx
@@ -4,10 +4,10 @@ import "./styles.less";
import { SvgIcons } from "@dnnsoftware/dnn-react-common";
export default class PersonaBarPageIcon extends Component {
- /* eslint-disable react/no-danger */
+
selectIcon(number) {
- /*eslint-disable react/no-danger*/
+
switch (number) {
case "normal":
return (
);
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarSelectionArrow.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarSelectionArrow.jsx
index 3ffc74d2108..5140d7b555a 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarSelectionArrow.jsx
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarSelectionArrow.jsx
@@ -46,7 +46,7 @@ export default class PersonaBarSelectionArrow extends Component {
this.setState({ showMenu: false });
}
- /* eslint-disable react/no-danger */
+
renderMoreActions() {
return