UNPKG

ui-router-core

Version:

UI-Router Core: Framework agnostic, State-based routing for JavaScript Single Page Apps

112 lines 4.09 kB
/** * @coreapi * @module state */ /** for typedoc */ import { toJson } from "../common/common"; import { isString } from "../common/predicates"; /** * Encapsulate the target (destination) state/params/options of a [[Transition]]. * * This class is frequently used to redirect a transition to a new destination. * * See: * * - [[HookResult]] * - [[TransitionHookFn]] * - [[TransitionService.onStart]] * * To create a `TargetState`, use [[StateService.target]]. * * --- * * This class wraps: * * 1) an identifier for a state * 2) a set of parameters * 3) and transition options * 4) the registered state object (the [[StateDeclaration]]) * * Many UI-Router APIs such as [[StateService.go]] take a [[StateOrName]] argument which can * either be a *state object* (a [[StateDeclaration]] or [[StateObject]]) or a *state name* (a string). * The `TargetState` class normalizes those options. * * A `TargetState` may be valid (the state being targeted exists in the registry) * or invalid (the state being targeted is not registered). */ var TargetState = (function () { /** * The TargetState constructor * * Note: Do not construct a `TargetState` manually. * To create a `TargetState`, use the [[StateService.target]] factory method. * * @param _identifier An identifier for a state. * Either a fully-qualified state name, or the object used to define the state. * @param _definition The internal state representation, if exists. * @param _params Parameters for the target state * @param _options Transition options. * * @internalapi */ function TargetState(_identifier, _definition, _params, _options) { if (_options === void 0) { _options = {}; } this._identifier = _identifier; this._definition = _definition; this._options = _options; this._params = _params || {}; } /** The name of the state this object targets */ TargetState.prototype.name = function () { return this._definition && this._definition.name || this._identifier; }; /** The identifier used when creating this TargetState */ TargetState.prototype.identifier = function () { return this._identifier; }; /** The target parameter values */ TargetState.prototype.params = function () { return this._params; }; /** The internal state object (if it was found) */ TargetState.prototype.$state = function () { return this._definition; }; /** The internal state declaration (if it was found) */ TargetState.prototype.state = function () { return this._definition && this._definition.self; }; /** The target options */ TargetState.prototype.options = function () { return this._options; }; /** True if the target state was found */ TargetState.prototype.exists = function () { return !!(this._definition && this._definition.self); }; /** True if the object is valid */ TargetState.prototype.valid = function () { return !this.error(); }; /** If the object is invalid, returns the reason why */ TargetState.prototype.error = function () { var base = this.options().relative; if (!this._definition && !!base) { var stateName = base.name ? base.name : base; return "Could not resolve '" + this.name() + "' from state '" + stateName + "'"; } if (!this._definition) return "No such state '" + this.name() + "'"; if (!this._definition.self) return "State '" + this.name() + "' has an invalid definition"; }; TargetState.prototype.toString = function () { return "'" + this.name() + "'" + toJson(this.params()); }; return TargetState; }()); export { TargetState }; /** Returns true if the object has a state property that might be a state or state name */ TargetState.isDef = function (obj) { return obj && obj.state && (isString(obj.state) || isString(obj.state.name)); }; //# sourceMappingURL=targetState.js.map