Files
redash/client/app/components/items-list/classes/StateStorage.js
Arik Fraimovich 56d3be2248 Prettier all the Javascript code & GitHub Action (#4433)
* Prettier all the JS files

* Add GitHub Action to autoformat code pushed to master

* Fix eslint violation due to formatting.

* Remove GitHub actions for styling

* Add restyled.io config
2019-12-11 17:05:38 +02:00

58 lines
1.6 KiB
JavaScript

import { defaults } from "lodash";
import { clientConfig } from "@/services/auth";
import { $location } from "@/services/ng";
import { parse as parseOrderBy, compile as compileOrderBy } from "./Sorter";
export class StateStorage {
constructor(state = {}) {
this._state = { ...state };
}
getState() {
return defaults(this._state, {
page: 1,
itemsPerPage: clientConfig.pageSize,
orderByField: "created_at",
orderByReverse: false,
searchTerm: "",
tags: [],
});
}
// eslint-disable-next-line class-methods-use-this
setState() {}
}
export class UrlStateStorage extends StateStorage {
getState() {
const defaultState = super.getState();
const params = $location.search();
const searchTerm = params.q || "";
// in search mode order by should be explicitly specified in url, otherwise use default
const defaultOrderBy =
searchTerm !== "" ? "" : compileOrderBy(defaultState.orderByField, defaultState.orderByReverse);
const { field: orderByField, reverse: orderByReverse } = parseOrderBy(params.order || defaultOrderBy);
return {
page: parseInt(params.page, 10) || defaultState.page,
itemsPerPage: parseInt(params.page_size, 10) || defaultState.itemsPerPage,
orderByField,
orderByReverse,
searchTerm,
};
}
// eslint-disable-next-line class-methods-use-this
setState({ page, itemsPerPage, orderByField, orderByReverse, searchTerm }) {
$location.search({
page,
page_size: itemsPerPage,
order: compileOrderBy(orderByField, orderByReverse),
q: searchTerm !== "" ? searchTerm : null,
});
}
}