CoolCMS API

TreePosition extends BaseComponent
in package

FinalYes

Position choice of a node among the children of the target parent: "To the end / To the start / After item..." (the edit form adds "Keep current position"). Shared by the "Move to..." modal of the admin grid ({@see \App\UI\Admin\System\Components\DataGridComponent\Traits\TreeMoveTrait}) and by tree edit forms, so the conversion of the choice into a move ({@see TreeMovePlan}) exists once.

The fields are real Nette controls of the host form (addFields()); the component only renders them and maintains the sibling list: after the parent changes (the picker's hidden field fires change), tree-position.js fetches the children of the new parent through the signal siblings! and rewrites the "After item" select and the hidden snapshot of children. On save the expected neighbors are derived from the snapshot and the server verifies them under the tree lock, so a stale form ends with TREE_STALE instead of a move elsewhere than the user saw.

Table of Contents

Constants

FIELD_AFTER  : mixed = 'treeAfterId'
FIELD_POSITION  : mixed = 'treePosition'
FIELD_SIBLINGS  : mixed = 'treeSiblings'
META_PARENT_ID  : mixed = 'moveSubtreeToParentId'
Save meta key, same as {@see \App\Core\Traits\Api\Models\Managers\TreeTrait::META_MOVE_SUBTREE_PARENT}.

Properties

$container  : Container
$routerDispatcher  : RouterDispatcher
$translator  : ITranslator
$appContext  : AppContext
$componentParameters  : array<string, mixed>
$currencyContext  : CurrencyContext|null
$deviceDetector  : DeviceDetector|null
$languageContext  : LanguageContext|null
$localizationContext  : LocalizationContext|null
$settingContext  : SettingContext
$themeContext  : ThemeContext|null
$translatorDomain  : string|null
$config  : TreePositionConfig

Methods

__call()  : mixed
Dispatches `renderXyz()` to `render('Xyz', ...$args)`.
__construct()  : mixed
addFields()  : void
Adds the position fields to the host form. Both the choice and the sibling are text controls rendered as `<select>`: JS changes the sibling options by the parent, and Nette would reject validation against the items. The validity of the choice is guarded by {@see TreeMovePlan::fromPosition()} and by the server contract.
buildSaveMeta()  : array<string, mixed>|null
Builds the move meta for `manager->save()` of the edit form.
createComponent()  : IComponent|null
getAppContext()  : AppContext
getComponentParameter()  : mixed
Returns a component parameter, or null when it is not set.
getContainer()  : Container
getCurrencyContext()  : CurrencyContext|null
getLanguageContext()  : LanguageContext|null
getLocalizationContext()  : LocalizationContext|null
getRouterDispatcher()  : RouterDispatcher
getSettingContext()  : SettingContext
getSettings()  : array<int, array<string, mixed>>
getThemeContext()  : ThemeContext|null
handleSiblings()  : void
Returns the children of the parent for the "After item" select (JSON); called by `tree-position.js` after the parent changes. Read-only within a screen the user has already passed the presenter gate for.
hasServiceByType()  : bool
Returns whether the container has a service of the given type.
initializeAllContexts()  : void
injectDeviceDetector()  : void
onCreate()  : void
render()  : void
resolveFailureKey()  : string|null
Returns the fully qualified message key for a failed save or move when the result has a tree reason (stale snapshot, lock, move under an own descendant); otherwise null, meaning the generic message.
setAppContext()  : $this
setComponentParameter()  : void
Sets a component parameter.
setConfig()  : self
setCurrencyContext()  : $this
setLanguageContext()  : $this
setLocalizationContext()  : $this
setSettingContext()  : $this
setThemeContext()  : $this
setup()  : void
setupAppContext()  : void
typedComponent()  : T
Returns a subcomponent with a verified type.
frontPresenter()  : BasePresenter|null
Returns the front presenter the component is attached to (null outside the front end or when detached).
getTranslator()  : ITranslator
setTemplateFile()  : void
setTranslator()  : self
createMultiplierComponent()  : Multiplier<string|int, IComponent>
Creates a multiplier for the component.
createNewComponentInstance()  : IComponent|null
Creates a new component instance without adding it to the presenter; used by the multiplier.
createStandardComponent()  : IComponent|null
Creates a standard component (not a multiplier).
normalizeId()  : int|null
resolveForm()  : Form|null
Host form, searched upward from the component (presenter or component, same as the Picker).
resolveLangId()  : int|null

Constants

FIELD_POSITION

public mixed FIELD_POSITION = 'treePosition'

FIELD_SIBLINGS

public mixed FIELD_SIBLINGS = 'treeSiblings'

META_PARENT_ID

Save meta key, same as {@see \App\Core\Traits\Api\Models\Managers\TreeTrait::META_MOVE_SUBTREE_PARENT}.

public mixed META_PARENT_ID = 'moveSubtreeToParentId'

Properties

$componentParameters

protected array<string, mixed> $componentParameters = []

component parameters set by setComponentParameter()

$translatorDomain

protected string|null $translatorDomain = 'admin.system.components.treePosition'

Methods

__call()

Dispatches `renderXyz()` to `render('Xyz', ...$args)`.

public __call(string $name, array<string|int, mixed> $args) : mixed

Called only when the component has no renderXyz() method of its own.

Parameters
$name : string
$args : array<string|int, mixed>

addFields()

Adds the position fields to the host form. Both the choice and the sibling are text controls rendered as `<select>`: JS changes the sibling options by the parent, and Nette would reject validation against the items. The validity of the choice is guarded by {@see TreeMovePlan::fromPosition()} and by the server contract.

public static addFields(Container $form, bool $allowKeep) : void
Parameters
$form : Container
$allowKeep : bool

buildSaveMeta()

Builds the move meta for `manager->save()` of the edit form.

public static buildSaveMeta(ArrayHash<string|int, mixed>|array<string, mixed> $values, int $nodeId, int|null $originalParentId, int|null $newParentId) : array<string, mixed>|null
  • keep (or a missing choice): the position stays; when the parent changes, the node becomes the last child,
  • any other choice: parent + afterId + expected neighbors from the snapshot (the move also happens without a parent change).
Parameters
$values : ArrayHash<string|int, mixed>|array<string, mixed>
$nodeId : int
$originalParentId : int|null
$newParentId : int|null
Return values
array<string, mixed>|null —

[] means do not move, null means an invalid choice (e.g. "After item" without an item)

createComponent()

public createComponent(string $name) : IComponent|null
Parameters
$name : string
Return values
IComponent|null

getComponentParameter()

Returns a component parameter, or null when it is not set.

public getComponentParameter(string $name) : mixed
Parameters
$name : string

getContainer()

public getContainer() : Container
Return values
Container

getSettings()

public getSettings() : array<int, array<string, mixed>>
Return values
array<int, array<string, mixed>>

handleSiblings()

Returns the children of the parent for the "After item" select (JSON); called by `tree-position.js` after the parent changes. Read-only within a screen the user has already passed the presenter gate for.

public handleSiblings([string $parentId = '' ]) : void
Parameters
$parentId : string = ''

hasServiceByType()

Returns whether the container has a service of the given type.

public hasServiceByType(string $className) : bool

The name is composed dynamically (module plus component), so class_exists() runs first, and a true result guarantees a valid type.

Parameters
$className : string
Tags
phpstan-assert-if-true

class-string $className

Return values
bool

resolveFailureKey()

Returns the fully qualified message key for a failed save or move when the result has a tree reason (stale snapshot, lock, move under an own descendant); otherwise null, meaning the generic message.

public static resolveFailureKey(Result $result) : string|null
Parameters
$result : Result
Return values
string|null

setComponentParameter()

Sets a component parameter.

public setComponentParameter(string $name, mixed $value) : void
Parameters
$name : string
$value : mixed

typedComponent()

Returns a subcomponent with a verified type.

public typedComponent(string $name, T> $type) : T

Use it instead of an inline @var above $this['x'] (which does not narrow the type) and instead of the generic IComponent that $this['x'] returns. See Form::typedComponent().

Parameters
$name : string
$type : T>
Tags
template
Return values
T

frontPresenter()

Returns the front presenter the component is attached to (null outside the front end or when detached).

protected frontPresenter() : BasePresenter|null
Return values
BasePresenter|null

getTranslator()

protected getTranslator() : ITranslator
Return values
ITranslator

setTemplateFile()

protected setTemplateFile(string $dir, string $filename) : void
Parameters
$dir : string
$filename : string

setTranslator()

protected setTranslator(ITranslator $translator) : self
Parameters
$translator : ITranslator
Return values
self

createMultiplierComponent()

Creates a multiplier for the component.

private createMultiplierComponent(string $name) : Multiplier<string|int, IComponent>
Parameters
$name : string
Return values
Multiplier<string|int, IComponent>

createNewComponentInstance()

Creates a new component instance without adding it to the presenter; used by the multiplier.

private createNewComponentInstance(string $baseName[, int|string|null $uniqueKey = null ]) : IComponent|null
Parameters
$baseName : string
$uniqueKey : int|string|null = null
Return values
IComponent|null

createStandardComponent()

Creates a standard component (not a multiplier).

private createStandardComponent(string $name) : IComponent|null
Parameters
$name : string
Return values
IComponent|null

normalizeId()

private normalizeId(mixed $value) : int|null
Parameters
$value : mixed
Return values
int|null

resolveForm()

Host form, searched upward from the component (presenter or component, same as the Picker).

private resolveForm() : Form|null
Return values
Form|null

resolveLangId()

private resolveLangId() : int|null
Return values
int|null
On this page

Search results