mirror of
https://github.com/hanzoai/team.git
synced 2026-09-30 01:57:35 +00:00
webapp/platform publishes six packages and the channels app carries a seventh in-tree, and every one of them went out under @mattermost — types, client, components, shared, eslint-plugin, compass-icons and mattermost-redux — while the plugin that consumes them already asks for @hanzoteam/types and @hanzoteam/client by name. It could not build: it was asking a registry for a package nobody publishes. They are @hanzoteam/* now, and mattermost-redux is @hanzoteam/redux, moved to src/packages/@hanzoteam/redux so the directory matches the alias that always pointed there. @mattermost/calls-common and @mattermost/desktop-api stay. Those are published by someone else and resolved from npm; renaming a package we merely consume would name a thing that does not exist. The jest moduleNameMapper entries needed doing by hand — they spell the scope inside a regex, so a sweep over the plain name walks straight past them, and a missed one fails at require time rather than at build.
@hanzoteam/eslint-plugin
An ESLint plugin containing the configuration used by Mattermost as well as support for custom rules specific to the Mattermost code base.
Custom Rules
no-dispatch-getstate
Prevents passing a redux store's getState into its dispatch as an unnecessary second argument.
We started doing this accidentally at some point because of a misunderstanding about how redux-thunk worked, so this stops anyone from making that same mistake again.
Examples of incorrect code for this rule:
export function someAction() {
return (dispatch, getState) => {
dispatch(doSomething(), getState);
};
}
Examples of correct code for this rule:
export function someAction() {
return (dispatch) => {
dispatch(doSomething());
};
}
use-external-link
Ensures that any link which opens a URL outside of Mattermost using target="_blank" uses the ExternalLink component.
Examples of incorrect code for this rule:
export function SomeLink() {
return (
<a
href="https://example.com"
target="_blank"
rel="noopener noreferrer"
/>
);
}
Examples of correct code for this rule:
import ExternalLink from 'components/external_link';
export function SomeLink() {
return <ExternalLink href="https://example.com"/>;
}