Skip to content
Commits on Source (2)
......@@ -5,4 +5,5 @@ coverage
.idea
yarn-error.log
.history
yarn.lock
\ No newline at end of file
yarn.lock
lib
\ No newline at end of file
.cache
.DS_Store
.eslintrc.js
.gitlab-ci.yml
.history
.idea
.npmrc
.prettierrc
.vscode
dist
lib
node_modules
src
tsconfig.json
tslint.json
yarn-error.log
\ No newline at end of file
@sportnet:registry=https://gitlab.bart.sk/api/v4/packages/npm/
registry=https://registry.npmjs.org
# Query HOC Component
## About
Query HOC Component slúži na jednotnú implementáciu nastavovania parametrov filtrovania a stránkovania zoznamov do URL a ich získavania v props.
## Implementácia
### Typescript
```typescript
import * as React from 'react';
import connectQueryHoc, { IQueryHocProps, QueryHocTypes } from 'query-hoc';
const queryHocConfig = {
parameters: {
page: {
type: QueryHocTypes.Number,
defaultValue: 1,
},
q: {
type: QueryHocTypes.String,
defaultValue: '',
},
articles: {
type: QueryHocTypes.Array,
defaultValue: [],
delimiter: '|'
}
},
} as const;
type Props = {} & IQueryHocProps<typeof queryHocConfig>;
class List extends React.PureComponent<Props> {
handleChangeQ = (e: React.FormEvent<HTMLInputElement>) => {
const q = (e.target as HTMLInputElement).value;
this.props.setParameter({ q, page: 1 });
};
render() {
const { query: { q } } = this.props;
return (
<input
value={q}
onChange={this.handleChangeQ}
/>
);
}
}
export default connectQueryHoc(queryHocConfig)(List);
```
### Javascript
```javascript
import * as React from 'react';
import connectQueryHoc, { QueryHocTypes } from 'query-hoc';
const queryHocConfig = {
parameters: {
page: {
type: QueryHocTypes.Number,
defaultValue: 1,
},
q: {
type: QueryHocTypes.String,
defaultValue: '',
},
articles: {
type: QueryHocTypes.Array,
defaultValue: [],
delimiter: '|'
}
},
};
class List extends React.PureComponent {
handleChangeQ = e => {
const q = e.target.value;
this.props.setParameter({ q, page: 1 });
};
render() {
const { query: { q } } = this.props;
return (
<input
value={q}
onChange={this.handleChangeQ}
/>
);
}
}
export default connectQueryHoc(queryHocConfig)(List);
```
## Type Properties
Pri definovaní parametrov je možné použiť tieto typy z objektu QueryHocTypes:
1. String
2. Number
3. Array
Pri definovaní parametrov je možné zadefinovať aj tieto properties:
1. defaultValue (predvolená hodnota parametru ak zatiaľ nebola žiadna zadaná)
2. delimiter (len pre typ Array)
## Implementácia s balíkom redux-list
```javascript
componentDidUpdate(prevProps) {
if (this.props.serializedQuery !== prevProps.serializedQuery) {
this.props.dispatch(
setParams({
listName: LIST_NAME,
parameters: this.props.query,
}),
);
}
}
```
## Implementácia hooks + typescript
```typescript
import * as React from 'react';
import useQuery, {
NumberParam,
StringParam,
ArrayParam,
PageParam,
} from 'query-hoc/lib/useQuery';
const queryConfig = {
parameters: {
q: StringParam(''),
page: PageParam(),
sections: ArrayParam(NumberParam(0), [], '|'),
users: ArrayParam(StringParam(''), []),
},
};
type Props = {
router: any,
location: {
search: string,
pathname: string
}
}
const List: React.FC<Props> = ({
router,
location: { search, pathname },
}) => {
const {query, setQuery, serializedQuery} = useQuery(
search,
serializedQuery => router.push(`${pathname}${serializedQuery}`),
queryConfig,
);
function handleChangeQ (e: React.FormEvent<HTMLInputElement>) {
const q = (e.target as HTMLInputElement).value;
setQuery({ q, page: 1 });
};
return (
<input
value={query.q}
onChange={handleChangeQ}
/>
);
};
export default List;
```
\ No newline at end of file
import React from 'react';
import { Subtract } from 'utility-types/dist/mapped-types';
interface ILocation {
pathname: string;
search: string;
[key: string]: any;
}
declare type Props = {
router?: {
push: (queryString: string) => void;
};
location?: ILocation;
history?: {
location?: ILocation;
push?: (url: string) => void;
};
};
export declare enum QueryHocTypes {
Array = "array",
Number = "number",
String = "string"
}
declare type ArrayParameter = {
type: QueryHocTypes.Array;
defaultValue?: ReadonlyArray<number> | ReadonlyArray<string>;
delimiter?: string;
};
declare type StringParameter = {
type: QueryHocTypes.String;
defaultValue?: string;
};
declare type NumberParameter = {
type: QueryHocTypes.Number;
defaultValue?: number;
};
export interface IQueryHocConfig {
parameters: {
[key: string]: ArrayParameter | StringParameter | NumberParameter;
};
}
export interface IQueryHocProps<C extends IQueryHocConfig> {
setParameter: (parameters: Partial<{
[K in keyof C['parameters']]: C['parameters'][K]['defaultValue'];
}>) => void;
query: {
[K in keyof C['parameters']]: C['parameters'][K]['defaultValue'];
};
serializedQuery: string;
}
/**
* @deprecated in favour of IQueryHocProps
*/
export declare type QueryHocInterface = IQueryHocProps<IQueryHocConfig>;
export declare const parseQueryString: <C extends IQueryHocConfig>(queryString: string, config?: C | undefined) => { [K in keyof C["parameters"]]: C["parameters"][K]["defaultValue"]; };
export declare const serializeQuery: <C extends IQueryHocConfig>(query: { [K in keyof C["parameters"]]: C["parameters"][K]["defaultValue"]; }, config?: C | undefined) => string;
export default function <C extends IQueryHocConfig>(config: C): <P extends IQueryHocProps<C>>(WrappedComponent: React.ComponentType<P & Props>) => React.ComponentClass<Subtract<P & Props, IQueryHocProps<C>>, any>;
export {};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.serializeQuery = exports.parseQueryString = exports.QueryHocTypes = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var utilities_1 = require("@sportnet/utilities");
var hoist_non_react_statics_1 = tslib_1.__importDefault(require("hoist-non-react-statics"));
var QueryHocTypes;
(function (QueryHocTypes) {
QueryHocTypes["Array"] = "array";
QueryHocTypes["Number"] = "number";
QueryHocTypes["String"] = "string";
})(QueryHocTypes = exports.QueryHocTypes || (exports.QueryHocTypes = {}));
var getQueryString = function (props) {
var location = (0, utilities_1.getProp)(props, ['history', 'location'], props.location);
return (0, utilities_1.getProp)(location, ['search'], '');
};
var parseQueryString = function (queryString, config) {
var partialQuery = queryString
.replace(/^\?/, '')
.split('&')
.reduce(function (acc, part) {
var split = part.split('=');
var parameterName = decodeURIComponent(split[0]);
var parameterValue = decodeURIComponent(split[1]);
if (parameterName && parameterValue) {
var type = (0, utilities_1.getProp)(config, ['parameters', parameterName, 'type'], '');
switch (type) {
case QueryHocTypes.Array:
var delimiter = (0, utilities_1.getProp)(config, ['parameters', parameterName, 'delimiter'], ',');
acc[parameterName] = parameterValue.split(delimiter);
break;
case QueryHocTypes.Number:
acc[parameterName] = Number(parameterValue);
break;
default:
acc[parameterName] = String(parameterValue);
break;
}
}
return acc;
}, {});
// Add and replace falsy values in partialQuery with default values from config
var parameters = (0, utilities_1.getProp)(config, ['parameters'], {});
var query = Object.keys(parameters).reduce(function (acc, key) {
if (!acc[key]) {
var defaultValue = (0, utilities_1.getProp)(config, ['parameters', key], {}).defaultValue;
if (defaultValue !== undefined) {
acc[key] = defaultValue;
}
}
return acc;
}, tslib_1.__assign({}, partialQuery));
return query;
};
exports.parseQueryString = parseQueryString;
var serializeQuery = function (query, config) {
var search = Object.keys(query)
.sort()
.reduce(function (acc, parameterName) {
var parameterValue = query[parameterName];
if (parameterValue !== null && parameterValue !== undefined) {
var type = (0, utilities_1.getProp)(config, ['parameters', parameterName, 'type'], '');
if (type === QueryHocTypes.Array) {
var delimiter = (0, utilities_1.getProp)(config, ['parameters', parameterName, 'delimiter'], ',');
parameterValue = parameterValue.join(delimiter);
}
acc.push("".concat(encodeURIComponent(parameterName), "=").concat(encodeURIComponent(String(parameterValue))));
}
return acc;
}, []);
return "?".concat(search.join('&'));
};
exports.serializeQuery = serializeQuery;
var getDisplayName = function (WrappedComponent) {
return WrappedComponent.displayName || WrappedComponent.name || 'Component';
};
var create = function (WrappedComponent, config) {
var QueryHoc = /** @class */ (function (_super) {
tslib_1.__extends(QueryHoc, _super);
function QueryHoc() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.setParameter = function (parameters) {
var queryString = getQueryString(_this.props);
var query = tslib_1.__assign(tslib_1.__assign({}, (0, exports.parseQueryString)(queryString, config)), parameters);
var serializedQuery = (0, exports.serializeQuery)(query, config);
if ((0, utilities_1.getProp)(_this.props, ['history', 'push'], false)) {
_this.props.history.push(serializedQuery);
}
else if (_this.props.router) {
_this.props.router.push("".concat(_this.props.location.pathname).concat(serializedQuery));
}
};
return _this;
}
QueryHoc.prototype.render = function () {
var queryString = getQueryString(this.props);
var query = (0, exports.parseQueryString)(queryString, config);
var serializedQuery = (0, exports.serializeQuery)(query, config);
return (react_1.default.createElement(WrappedComponent, tslib_1.__assign({}, this.props, { serializedQuery: serializedQuery, query: query, setParameter: this.setParameter })));
};
return QueryHoc;
}(react_1.default.PureComponent));
(0, hoist_non_react_statics_1.default)(QueryHoc, WrappedComponent);
// SSR support: extends props supplied to static method getInitialProps with queryProps
if (typeof WrappedComponent['getInitialProps'] === 'function') {
QueryHoc.getInitialProps = function (props) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var queryString, query, serializedQuery;
return tslib_1.__generator(this, function (_a) {
queryString = getQueryString(props);
query = (0, exports.parseQueryString)(queryString, config);
serializedQuery = (0, exports.serializeQuery)(query, config);
return [2 /*return*/, WrappedComponent.getInitialProps(tslib_1.__assign(tslib_1.__assign({}, props), { query: query, serializedQuery: serializedQuery }))];
});
}); };
}
QueryHoc.displayName = "QueryHoc(".concat(getDisplayName(WrappedComponent), ")");
return QueryHoc;
};
function default_1(config) {
return function (WrappedComponent) { return create(WrappedComponent, config); };
}
exports.default = default_1;
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
\ No newline at end of file
{
"name": "@sportnet/query-hoc",
"version": "1.0.0",
"version": "1.0.1",
"description": "",
"main": "./index.js",
"scripts": {
......
export interface IQueryParameterConfig<T> {
deserialize: (value: string) => T;
serialize: (value: T) => string;
}
export interface IQueryConfig {
parameters: {
[key: string]: IQueryParameterConfig<any>;
};
}
export interface IQueryResult<C extends IQueryConfig> {
setQuery: (parameters: Partial<{
[K in keyof C['parameters']]: ReturnType<C['parameters'][K]['deserialize']>;
}>) => void;
query: {
[K in keyof C['parameters']]: ReturnType<C['parameters'][K]['deserialize']>;
};
serializedQuery: string;
}
export declare const deserializeQuery: <C extends IQueryConfig>(queryString: string, config?: C | undefined) => { [K in keyof C["parameters"]]: ReturnType<C["parameters"][K]["deserialize"]>; };
export declare const serializeQuery: <C extends IQueryConfig>(query: { [K in keyof C["parameters"]]: ReturnType<C["parameters"][K]["deserialize"]>; }, config?: C | undefined) => string;
export default function <C extends IQueryConfig>(search: string, onQueryChange: (serializedQuery: string) => void, config: C): IQueryResult<C>;
export declare const StringParam: <D extends string>(defaultValue: D) => IQueryParameterConfig<string | D>;
export declare const NumberParam: <D extends number>(defaultValue: D) => IQueryParameterConfig<number | D>;
export declare const ArrayParam: <T extends unknown, D extends T[]>(itemQuery: IQueryParameterConfig<T>, defaultValue: D, separator?: string) => IQueryParameterConfig<T[]>;
export declare const PageParam: (base?: number) => IQueryParameterConfig<number>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PageParam = exports.ArrayParam = exports.NumberParam = exports.StringParam = exports.serializeQuery = exports.deserializeQuery = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var deserializeQuery = function (queryString, config) {
var partialQuery = queryString
.replace(/^\?/, '')
.split('&')
.reduce(function (acc, part) {
var split = part.split('=');
var parameterName = decodeURIComponent(split[0]);
var parameterValue = decodeURIComponent(split[1]);
if (parameterName) {
if (config && config.parameters[parameterName]) {
acc[parameterName] = config.parameters[parameterName].deserialize(parameterValue);
}
else {
acc[parameterName] = String(parameterValue);
}
}
return acc;
}, {});
// replace with default values
var query = partialQuery;
if (config) {
query = Object.keys(config.parameters).reduce(function (acc, parameterName) {
if (!(parameterName in acc)) {
acc[parameterName] = config.parameters[parameterName].deserialize('');
}
return acc;
}, query);
}
return query;
};
exports.deserializeQuery = deserializeQuery;
var serializeQuery = function (query, config) {
var search = Object.keys(query)
.sort()
.reduce(function (acc, parameterName) {
var parameterValue = query[parameterName];
if (config && config.parameters[parameterName]) {
acc.push("".concat(encodeURIComponent(parameterName), "=").concat(encodeURIComponent(config.parameters[parameterName].serialize(parameterValue))));
}
else {
acc.push("".concat(encodeURIComponent(parameterName), "=").concat(encodeURIComponent(String(parameterValue))));
}
return acc;
}, []);
return "?".concat(search.join('&'));
};
exports.serializeQuery = serializeQuery;
function default_1(search, onQueryChange, config) {
var query = react_1.default.useMemo(function () { return (0, exports.deserializeQuery)(search, config); }, [
search,
config,
]);
var handleQueryChange = react_1.default.useCallback(function (parameters) {
return onQueryChange((0, exports.serializeQuery)(tslib_1.__assign(tslib_1.__assign({}, query), parameters), config));
}, [query, config]);
var serializedQuery = react_1.default.useMemo(function () { return (0, exports.serializeQuery)(query, config); }, [
query,
config,
]);
return {
query: query,
setQuery: handleQueryChange,
serializedQuery: serializedQuery,
};
}
exports.default = default_1;
var StringParam = function (defaultValue) { return ({
serialize: function (v) { return v; },
deserialize: function (v) { return (v ? v : defaultValue); },
}); };
exports.StringParam = StringParam;
var NumberParam = function (defaultValue) { return ({
serialize: function (v) { return String(v); },
deserialize: function (v) {
var n = Number(v);
return n ? n : defaultValue;
},
}); };
exports.NumberParam = NumberParam;
var ArrayParam = function (itemQuery, defaultValue, separator) {
if (separator === void 0) { separator = ','; }
return ({
serialize: function (v) { return v.map(itemQuery.serialize).join(separator); },
deserialize: function (v) {
return v ? v.split(separator).map(itemQuery.deserialize) : defaultValue;
},
});
};
exports.ArrayParam = ArrayParam;
var PageParam = function (base) {
if (base === void 0) { base = 1; }
return ({
serialize: function (v) { return String(v); },
deserialize: function (v) {
var n = Number(v);
return n && n > base ? n : base;
},
});
};
exports.PageParam = PageParam;
//# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/useQuery/index.tsx"],"names":[],"mappings":"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"}
\ No newline at end of file
{
"sideEffects": false,
"module": "../esm/useQuery/index.js"
}
\ No newline at end of file