mirror of
https://github.com/flarum/core.git
synced 2025-08-04 15:37:51 +02:00
fix: 2.0 bugs (#4011)
This commit is contained in:
@@ -19,7 +19,7 @@
|
|||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
"flarum-tsconfig": "^1.0.2",
|
"flarum-tsconfig": "^1.0.2",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"typescript": "^4.5.4",
|
"typescript": "^4.5.4",
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"@flarum/prettier-config": "^1.0.0"
|
"@flarum/prettier-config": "^1.0.0"
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"@flarum/prettier-config": "^1.0.0"
|
"@flarum/prettier-config": "^1.0.0"
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
"flarum-tsconfig": "^1.0.2",
|
"flarum-tsconfig": "^1.0.2",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"typescript": "^4.5.4",
|
"typescript": "^4.5.4",
|
||||||
"typescript-coverage-report": "^0.6.1",
|
"typescript-coverage-report": "^0.6.1",
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/mithril": "^2.0.8",
|
"@types/mithril": "^2.0.8",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"@flarum/prettier-config": "^1.0.0"
|
"@flarum/prettier-config": "^1.0.0"
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1"
|
"webpack-cli": "^4.9.1"
|
||||||
},
|
},
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
"flarum-tsconfig": "^1.0.2",
|
"flarum-tsconfig": "^1.0.2",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1"
|
"webpack-cli": "^4.9.1"
|
||||||
}
|
}
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"@flarum/prettier-config": "^1.0.0"
|
"@flarum/prettier-config": "^1.0.0"
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"@flarum/prettier-config": "^1.0.0"
|
"@flarum/prettier-config": "^1.0.0"
|
||||||
|
@@ -2,7 +2,7 @@ import app from 'flarum/forum/app';
|
|||||||
import FormModal from 'flarum/common/components/FormModal';
|
import FormModal from 'flarum/common/components/FormModal';
|
||||||
import Button from 'flarum/common/components/Button';
|
import Button from 'flarum/common/components/Button';
|
||||||
import Stream from 'flarum/common/utils/Stream';
|
import Stream from 'flarum/common/utils/Stream';
|
||||||
import Form from '@flarum/core/src/common/components/Form';
|
import Form from 'flarum/common/components/Form';
|
||||||
|
|
||||||
export default class NicknameModal extends FormModal {
|
export default class NicknameModal extends FormModal {
|
||||||
oninit(vnode) {
|
oninit(vnode) {
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
"flarum-tsconfig": "^1.0.2",
|
"flarum-tsconfig": "^1.0.2",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"typescript": "^4.5.4",
|
"typescript": "^4.5.4",
|
||||||
"typescript-coverage-report": "^0.6.1",
|
"typescript-coverage-report": "^0.6.1",
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
"@types/pusher-js": "^5.1.0",
|
"@types/pusher-js": "^5.1.0",
|
||||||
"flarum-tsconfig": "^1.0.2",
|
"flarum-tsconfig": "^1.0.2",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"typescript": "^4.5.4",
|
"typescript": "^4.5.4",
|
||||||
"typescript-coverage-report": "^0.6.1",
|
"typescript-coverage-report": "^0.6.1",
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
"@types/mithril": "^2.0.11",
|
"@types/mithril": "^2.0.11",
|
||||||
"flarum-tsconfig": "^1.0.2",
|
"flarum-tsconfig": "^1.0.2",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"typescript": "^4.7.4",
|
"typescript": "^4.7.4",
|
||||||
"typescript-coverage-report": "^0.6.4",
|
"typescript-coverage-report": "^0.6.4",
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1",
|
"webpack-cli": "^4.9.1",
|
||||||
"@flarum/prettier-config": "^1.0.0"
|
"@flarum/prettier-config": "^1.0.0"
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.10.0",
|
"webpack-cli": "^4.10.0",
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@flarum/prettier-config": "^1.0.0",
|
"@flarum/prettier-config": "^1.0.0",
|
||||||
"flarum-tsconfig": "^1.0.0",
|
"flarum-tsconfig": "^1.0.0",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.76.0",
|
||||||
"webpack-cli": "^4.9.1"
|
"webpack-cli": "^4.9.1"
|
||||||
|
@@ -4,10 +4,10 @@ import Button from 'flarum/common/components/Button';
|
|||||||
import Stream from 'flarum/common/utils/Stream';
|
import Stream from 'flarum/common/utils/Stream';
|
||||||
import withAttr from 'flarum/common/utils/withAttr';
|
import withAttr from 'flarum/common/utils/withAttr';
|
||||||
import ItemList from 'flarum/common/utils/ItemList';
|
import ItemList from 'flarum/common/utils/ItemList';
|
||||||
|
import Form from 'flarum/common/components/Form';
|
||||||
|
import FieldSet from 'flarum/common/components/FieldSet';
|
||||||
|
|
||||||
import { getPermanentSuspensionDate } from '../helpers/suspensionHelper';
|
import { getPermanentSuspensionDate } from '../helpers/suspensionHelper';
|
||||||
import Form from '@flarum/core/src/common/components/Form';
|
|
||||||
import FieldSet from '@flarum/core/src/common/components/FieldSet';
|
|
||||||
|
|
||||||
export default class SuspendUserModal extends FormModal {
|
export default class SuspendUserModal extends FormModal {
|
||||||
oninit(vnode) {
|
oninit(vnode) {
|
||||||
|
@@ -2,8 +2,8 @@ import app from 'flarum/forum/app';
|
|||||||
import Modal from 'flarum/common/components/Modal';
|
import Modal from 'flarum/common/components/Modal';
|
||||||
import Button from 'flarum/common/components/Button';
|
import Button from 'flarum/common/components/Button';
|
||||||
import fullTime from 'flarum/common/helpers/fullTime';
|
import fullTime from 'flarum/common/helpers/fullTime';
|
||||||
|
import Form from 'flarum/common/components/Form';
|
||||||
import { isPermanentSuspensionDate, localStorageKey } from '../helpers/suspensionHelper';
|
import { isPermanentSuspensionDate, localStorageKey } from '../helpers/suspensionHelper';
|
||||||
import Form from '@flarum/core/src/common/components/Form';
|
|
||||||
|
|
||||||
export default class SuspensionInfoModal extends Modal {
|
export default class SuspensionInfoModal extends Modal {
|
||||||
oninit(vnode) {
|
oninit(vnode) {
|
||||||
|
@@ -20,7 +20,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"flarum-tsconfig": "^1.0.2",
|
"flarum-tsconfig": "^1.0.2",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"typescript": "^4.5.4",
|
"typescript": "^4.5.4",
|
||||||
"typescript-coverage-report": "^0.6.1",
|
"typescript-coverage-report": "^0.6.1",
|
||||||
|
@@ -6,11 +6,12 @@ import Button from 'flarum/common/components/Button';
|
|||||||
import LoadingIndicator from 'flarum/common/components/LoadingIndicator';
|
import LoadingIndicator from 'flarum/common/components/LoadingIndicator';
|
||||||
import withAttr from 'flarum/common/utils/withAttr';
|
import withAttr from 'flarum/common/utils/withAttr';
|
||||||
import Form from 'flarum/common/components/Form';
|
import Form from 'flarum/common/components/Form';
|
||||||
|
import FormSectionGroup from 'flarum/admin/components/FormSectionGroup';
|
||||||
|
import FormSection from 'flarum/admin/components/FormSection';
|
||||||
|
|
||||||
import EditTagModal from './EditTagModal';
|
import EditTagModal from './EditTagModal';
|
||||||
import tagIcon from '../../common/helpers/tagIcon';
|
import tagIcon from '../../common/helpers/tagIcon';
|
||||||
import sortTags from '../../common/utils/sortTags';
|
import sortTags from '../../common/utils/sortTags';
|
||||||
import FormSectionGroup, { FormSection } from '@flarum/core/src/admin/components/FormSectionGroup';
|
|
||||||
|
|
||||||
function tagItem(tag) {
|
function tagItem(tag) {
|
||||||
return (
|
return (
|
||||||
|
@@ -37,7 +37,7 @@ class DiscussionResourceFields
|
|||||||
Schema\Relationship\ToMany::make('tags')
|
Schema\Relationship\ToMany::make('tags')
|
||||||
->includable()
|
->includable()
|
||||||
->writable()
|
->writable()
|
||||||
->required(fn (Context $context, Discussion $discussion) => ! $context->getActor()->can('bypassTagCounts', $discussion))
|
->required(fn (Context $context, Discussion $discussion) => $context->creating() && ! $context->getActor()->can('bypassTagCounts', $discussion))
|
||||||
->set(function (Discussion $discussion, array $newTags, Context $context) {
|
->set(function (Discussion $discussion, array $newTags, Context $context) {
|
||||||
$actor = $context->getActor();
|
$actor = $context->getActor();
|
||||||
|
|
||||||
|
@@ -34,7 +34,7 @@
|
|||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"expose-loader": "^3.1.0",
|
"expose-loader": "^3.1.0",
|
||||||
"flarum-tsconfig": "^1.0.2",
|
"flarum-tsconfig": "^1.0.2",
|
||||||
"flarum-webpack-config": "^2.0.0",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"typescript": "^4.5.4",
|
"typescript": "^4.5.4",
|
||||||
"typescript-coverage-report": "^0.6.1",
|
"typescript-coverage-report": "^0.6.1",
|
||||||
|
@@ -32,7 +32,7 @@ export type Extension = {
|
|||||||
extra: {
|
extra: {
|
||||||
'flarum-extension': {
|
'flarum-extension': {
|
||||||
title: string;
|
title: string;
|
||||||
'database-support': undefined | string[];
|
'database-support'?: string[];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
require?: Record<string, string>;
|
require?: Record<string, string>;
|
||||||
|
@@ -4,7 +4,8 @@ import type { IPageAttrs } from '../../common/components/Page';
|
|||||||
import type Mithril from 'mithril';
|
import type Mithril from 'mithril';
|
||||||
import Form from '../../common/components/Form';
|
import Form from '../../common/components/Form';
|
||||||
import extractText from '../../common/utils/extractText';
|
import extractText from '../../common/utils/extractText';
|
||||||
import FormSectionGroup, { FormSection } from './FormSectionGroup';
|
import FormSectionGroup from './FormSectionGroup';
|
||||||
|
import FormSection from './FormSection';
|
||||||
import ItemList from '../../common/utils/ItemList';
|
import ItemList from '../../common/utils/ItemList';
|
||||||
import InfoTile from '../../common/components/InfoTile';
|
import InfoTile from '../../common/components/InfoTile';
|
||||||
import { MaintenanceMode } from '../../common/Application';
|
import { MaintenanceMode } from '../../common/Application';
|
||||||
|
21
framework/core/js/src/admin/components/FormSection.tsx
Normal file
21
framework/core/js/src/admin/components/FormSection.tsx
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import Component from '../../common/Component';
|
||||||
|
import type { ComponentAttrs } from '../../common/Component';
|
||||||
|
import Mithril from 'mithril';
|
||||||
|
import classList from '../../common/utils/classList';
|
||||||
|
|
||||||
|
export interface IFormSectionAttrs extends ComponentAttrs {
|
||||||
|
label: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class FormSection<CustomAttrs extends IFormSectionAttrs = IFormSectionAttrs> extends Component<CustomAttrs> {
|
||||||
|
view(vnode: Mithril.Vnode<CustomAttrs, this>) {
|
||||||
|
const { className, ...attrs } = this.attrs;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={classList('FormSection', className)} {...attrs}>
|
||||||
|
<label>{this.attrs.label}</label>
|
||||||
|
<div className="FormSection-body">{vnode.children}</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@@ -16,20 +16,3 @@ export default class FormSectionGroup<CustomAttrs extends IFormSectionGroupAttrs
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IFormSectionAttrs extends ComponentAttrs {
|
|
||||||
label: any;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class FormSection<CustomAttrs extends IFormSectionAttrs = IFormSectionAttrs> extends Component<CustomAttrs> {
|
|
||||||
view(vnode: Mithril.Vnode<CustomAttrs, this>) {
|
|
||||||
const { className, ...attrs } = this.attrs;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className={classList('FormSection', className)} {...attrs}>
|
|
||||||
<label>{this.attrs.label}</label>
|
|
||||||
<div className="FormSection-body">{vnode.children}</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -367,7 +367,7 @@ export default abstract class Model {
|
|||||||
*/
|
*/
|
||||||
protected static getIdentifier(model: Model): ModelIdentifier;
|
protected static getIdentifier(model: Model): ModelIdentifier;
|
||||||
protected static getIdentifier(model?: Model): ModelIdentifier | null {
|
protected static getIdentifier(model?: Model): ModelIdentifier | null {
|
||||||
if (!model || !('id' in model.data)) return null;
|
if (!model || !model.data || !('id' in model.data)) return null;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: model.data.type,
|
type: model.data.type,
|
||||||
|
@@ -203,7 +203,7 @@ export default class FormGroup<CustomAttrs extends IFormGroupAttrs = IFormGroupA
|
|||||||
|
|
||||||
settingElement = <UploadImageButton value={stream} {...otherAttrs} />;
|
settingElement = <UploadImageButton value={stream} {...otherAttrs} />;
|
||||||
} else if (customFieldComponents.has(type)) {
|
} else if (customFieldComponents.has(type)) {
|
||||||
return customFieldComponents.get(type)(this.attrs);
|
return customFieldComponents.get(type)({ ...this.attrs, bidi: this.attrs.stream });
|
||||||
} else {
|
} else {
|
||||||
attrs.className = classList('FormControl', attrs.className);
|
attrs.className = classList('FormControl', attrs.className);
|
||||||
|
|
||||||
|
@@ -8,6 +8,7 @@ import Stream from '../../common/utils/Stream';
|
|||||||
import type Mithril from 'mithril';
|
import type Mithril from 'mithril';
|
||||||
import RequestError from '../../common/utils/RequestError';
|
import RequestError from '../../common/utils/RequestError';
|
||||||
import type { LoginParams } from '../../common/Session';
|
import type { LoginParams } from '../../common/Session';
|
||||||
|
import ForgotPasswordModal from './ForgotPasswordModal';
|
||||||
|
|
||||||
export interface ILoginModalAttrs extends IFormModalAttrs {
|
export interface ILoginModalAttrs extends IFormModalAttrs {
|
||||||
identification?: string;
|
identification?: string;
|
||||||
@@ -139,7 +140,7 @@ export default class LogInModal<CustomAttrs extends ILoginModalAttrs = ILoginMod
|
|||||||
const email = this.identification();
|
const email = this.identification();
|
||||||
const attrs = email.includes('@') ? { email } : undefined;
|
const attrs = email.includes('@') ? { email } : undefined;
|
||||||
|
|
||||||
app.modal.show(() => import('./ForgotPasswordModal'), attrs);
|
app.modal.show(ForgotPasswordModal, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -14,7 +14,7 @@ import listItems from '../../common/helpers/listItems';
|
|||||||
* The `UsersSearchSource` finds and displays user search results in the search
|
* The `UsersSearchSource` finds and displays user search results in the search
|
||||||
* dropdown.
|
* dropdown.
|
||||||
*/
|
*/
|
||||||
export default class UsersSearchResults implements SearchSource {
|
export default class UsersSearchSource implements SearchSource {
|
||||||
protected results = new Map<string, User[]>();
|
protected results = new Map<string, User[]>();
|
||||||
|
|
||||||
public resource: string = 'users';
|
public resource: string = 'users';
|
||||||
|
@@ -70,6 +70,8 @@ class ComposerState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.body = body;
|
this.body = body;
|
||||||
|
|
||||||
|
return componentClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
|
||||||
.FormSection & {
|
.FormSection &, &.FormControl {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -34,8 +34,8 @@
|
|||||||
|
|
||||||
.UserCard {
|
.UserCard {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 15px;
|
top: 0;
|
||||||
left: 16px;
|
left: 0;
|
||||||
z-index: var(--zindex-dropdown);
|
z-index: var(--zindex-dropdown);
|
||||||
transition: opacity 0.2s, transform 0.2s;
|
transition: opacity 0.2s, transform 0.2s;
|
||||||
transform: scale(0.95);
|
transform: scale(0.95);
|
||||||
@@ -454,7 +454,6 @@
|
|||||||
|
|
||||||
.Post-avatar {
|
.Post-avatar {
|
||||||
.Avatar--size(32px);
|
.Avatar--size(32px);
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.Post-main {
|
.Post-main {
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
"prettier": "@flarum/prettier-config",
|
"prettier": "@flarum/prettier-config",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/jest": "^29.2.2",
|
"@types/jest": "^29.2.2",
|
||||||
"flarum-webpack-config": "^2.0.1",
|
"flarum-webpack-config": "^3.0.0",
|
||||||
"flat": "^5.0.2",
|
"flat": "^5.0.2",
|
||||||
"jest": "^29.3.1",
|
"jest": "^29.3.1",
|
||||||
"jest-environment-jsdom": "^29.3.1",
|
"jest-environment-jsdom": "^29.3.1",
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "flarum-webpack-config",
|
"name": "flarum-webpack-config",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "2.0.2",
|
"version": "3.0.0",
|
||||||
"description": "Webpack config for Flarum JS and TS transpilation.",
|
"description": "Webpack config for Flarum JS and TS transpilation.",
|
||||||
"main": "src/index.cjs",
|
"main": "src/index.cjs",
|
||||||
"author": "Flarum Team",
|
"author": "Flarum Team",
|
||||||
|
@@ -3,6 +3,8 @@ const extensionId = require("./extensionId.cjs");
|
|||||||
const {Compilation} = require("webpack");
|
const {Compilation} = require("webpack");
|
||||||
|
|
||||||
class RegisterAsyncChunksPlugin {
|
class RegisterAsyncChunksPlugin {
|
||||||
|
static registry = {};
|
||||||
|
|
||||||
apply(compiler) {
|
apply(compiler) {
|
||||||
compiler.hooks.thisCompilation.tap("RegisterAsyncChunksPlugin", (compilation) => {
|
compiler.hooks.thisCompilation.tap("RegisterAsyncChunksPlugin", (compilation) => {
|
||||||
let alreadyOptimized = false;
|
let alreadyOptimized = false;
|
||||||
@@ -80,9 +82,13 @@ class RegisterAsyncChunksPlugin {
|
|||||||
if (concatenatedModule?.rootModule) {
|
if (concatenatedModule?.rootModule) {
|
||||||
// This is a chunk with many modules, we need to register all of them.
|
// This is a chunk with many modules, we need to register all of them.
|
||||||
concatenatedModule.modules?.forEach((module) => {
|
concatenatedModule.modules?.forEach((module) => {
|
||||||
|
if (! module.resource.includes(`${path.sep}src${path.sep}`)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// The path right after the src/ directory, without the extension.
|
// The path right after the src/ directory, without the extension.
|
||||||
const regPathSep = `\\${path.sep}`;
|
const regPathSep = `\\${path.sep}`;
|
||||||
const urlPath = module.resource.replace(`/.*${regPathSep}src(.*)${regPathSep}\..*/`, '$1');
|
const urlPath = module.resource.replace(new RegExp(`.*${regPathSep}src${regPathSep}([^.]+)\..+`), '$1');
|
||||||
|
|
||||||
if (! registrableModulesUrlPaths.has(urlPath)) {
|
if (! registrableModulesUrlPaths.has(urlPath)) {
|
||||||
registrableModulesUrlPaths.set(urlPath, [relevantChunk.id, moduleId, namespace, urlPath]);
|
registrableModulesUrlPaths.set(urlPath, [relevantChunk.id, moduleId, namespace, urlPath]);
|
||||||
@@ -93,9 +99,11 @@ class RegisterAsyncChunksPlugin {
|
|||||||
registrableModulesUrlPaths.forEach(([chunkId, moduleId, namespace, urlPath]) => {
|
registrableModulesUrlPaths.forEach(([chunkId, moduleId, namespace, urlPath]) => {
|
||||||
chunkModuleMemory[sourceChunkId] = chunkModuleMemory[sourceChunkId] || [];
|
chunkModuleMemory[sourceChunkId] = chunkModuleMemory[sourceChunkId] || [];
|
||||||
|
|
||||||
if (! chunkModuleMemory[sourceChunkId].includes(urlPath)) {
|
if (! chunkModuleMemory[sourceChunkId].includes(urlPath) && ! RegisterAsyncChunksPlugin.registry[`${chunkId}:${moduleId}:${namespace}`]?.includes(urlPath)) {
|
||||||
reg.push(`flarum.reg.addChunkModule('${chunkId}', '${moduleId}', '${namespace}', '${urlPath}');`);
|
reg.push(`flarum.reg.addChunkModule('${chunkId}', '${moduleId}', '${namespace}', '${urlPath}');`);
|
||||||
chunkModuleMemory[sourceChunkId].push(urlPath);
|
chunkModuleMemory[sourceChunkId].push(urlPath);
|
||||||
|
RegisterAsyncChunksPlugin.registry[`${chunkId}:${moduleId}:${namespace}`] ||= [];
|
||||||
|
RegisterAsyncChunksPlugin.registry[`${chunkId}:${moduleId}:${namespace}`].push(urlPath);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -52,10 +52,6 @@ conditionalTags:
|
|||||||
phpstan.rules.rule: %noUnnecessaryCollectionCall%
|
phpstan.rules.rule: %noUnnecessaryCollectionCall%
|
||||||
Larastan\Larastan\Rules\OctaneCompatibilityRule:
|
Larastan\Larastan\Rules\OctaneCompatibilityRule:
|
||||||
phpstan.rules.rule: %checkOctaneCompatibility%
|
phpstan.rules.rule: %checkOctaneCompatibility%
|
||||||
Larastan\Larastan\Rules\ModelProperties\ModelPropertyRule:
|
|
||||||
phpstan.rules.rule: %checkModelProperties%
|
|
||||||
Larastan\Larastan\Rules\ModelProperties\ModelPropertyStaticCallRule:
|
|
||||||
phpstan.rules.rule: %checkModelProperties%
|
|
||||||
Larastan\Larastan\Rules\UnusedViewsRule:
|
Larastan\Larastan\Rules\UnusedViewsRule:
|
||||||
phpstan.rules.rule: %checkUnusedViews%
|
phpstan.rules.rule: %checkUnusedViews%
|
||||||
Larastan\Larastan\Rules\ModelAppendsRule:
|
Larastan\Larastan\Rules\ModelAppendsRule:
|
||||||
@@ -400,15 +396,9 @@ services:
|
|||||||
onlyMethods: %noUnnecessaryCollectionCallOnly%
|
onlyMethods: %noUnnecessaryCollectionCallOnly%
|
||||||
excludeMethods: %noUnnecessaryCollectionCallExcept%
|
excludeMethods: %noUnnecessaryCollectionCallExcept%
|
||||||
|
|
||||||
-
|
|
||||||
class: Larastan\Larastan\Rules\ModelProperties\ModelPropertyRule
|
|
||||||
|
|
||||||
-
|
-
|
||||||
class: Larastan\Larastan\Rules\ModelAppendsRule
|
class: Larastan\Larastan\Rules\ModelAppendsRule
|
||||||
|
|
||||||
-
|
|
||||||
class: Larastan\Larastan\Rules\ModelProperties\ModelPropertyStaticCallRule
|
|
||||||
|
|
||||||
-
|
-
|
||||||
class: Larastan\Larastan\Types\GenericEloquentBuilderTypeNodeResolverExtension
|
class: Larastan\Larastan\Types\GenericEloquentBuilderTypeNodeResolverExtension
|
||||||
tags:
|
tags:
|
||||||
@@ -450,9 +440,6 @@ services:
|
|||||||
-
|
-
|
||||||
class: Larastan\Larastan\Properties\ModelPropertyHelper
|
class: Larastan\Larastan\Properties\ModelPropertyHelper
|
||||||
|
|
||||||
-
|
|
||||||
class: Larastan\Larastan\Rules\ModelProperties\ModelPropertiesRuleHelper
|
|
||||||
|
|
||||||
-
|
-
|
||||||
class: Larastan\Larastan\Rules\ModelRuleHelper
|
class: Larastan\Larastan\Rules\ModelRuleHelper
|
||||||
|
|
||||||
|
@@ -1,5 +1,11 @@
|
|||||||
parameters:
|
parameters:
|
||||||
|
reportUnmatchedIgnoredErrors: false
|
||||||
ignoreErrors:
|
ignoreErrors:
|
||||||
|
-
|
||||||
|
identifier: missingType.iterableValue
|
||||||
|
-
|
||||||
|
identifier: missingType.generics
|
||||||
|
|
||||||
# Remove this group below with larastan 2.0 (i.e Flarum 2.0)
|
# Remove this group below with larastan 2.0 (i.e Flarum 2.0)
|
||||||
- message: "#Relation '[A-z_-]+' is not found in [A-z\_]+ model.#"
|
- message: "#Relation '[A-z_-]+' is not found in [A-z\_]+ model.#"
|
||||||
reportUnmatched: false
|
reportUnmatched: false
|
||||||
|
@@ -36,8 +36,3 @@ parameters:
|
|||||||
excludePaths:
|
excludePaths:
|
||||||
- *.blade.php
|
- *.blade.php
|
||||||
databaseMigrationsPath: ['framework/core/migrations']
|
databaseMigrationsPath: ['framework/core/migrations']
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
identifier: missingType.iterableValue
|
|
||||||
-
|
|
||||||
identifier: missingType.generics
|
|
||||||
|
Reference in New Issue
Block a user