TreePosition
extends BaseComponent
in package
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_AFTER
public
mixed
FIELD_AFTER
= 'treeAfterId'
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
$container
public
Container
$container
Attributes
- #[Inject]
$routerDispatcher
public
RouterDispatcher
$routerDispatcher
$translator
public
ITranslator
$translator
Tags
$appContext
protected
AppContext
$appContext
$componentParameters
protected
array<string, mixed>
$componentParameters
= []
component parameters set by setComponentParameter()
$currencyContext
protected
CurrencyContext|null
$currencyContext
= NULL
$deviceDetector
protected
DeviceDetector|null
$deviceDetector
= NULL
$languageContext
protected
LanguageContext|null
$languageContext
= NULL
$localizationContext
protected
LocalizationContext|null
$localizationContext
= NULL
$settingContext
protected
SettingContext
$settingContext
$themeContext
protected
ThemeContext|null
$themeContext
= NULL
$translatorDomain
protected
string|null
$translatorDomain
= 'admin.system.components.treePosition'
$config
private
TreePositionConfig
$config
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>
__construct()
public
__construct() : 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|nullgetAppContext()
public
getAppContext() : AppContext
Return values
AppContextgetComponentParameter()
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
ContainergetCurrencyContext()
public
getCurrencyContext() : CurrencyContext|null
Return values
CurrencyContext|nullgetLanguageContext()
public
getLanguageContext() : LanguageContext|null
Return values
LanguageContext|nullgetLocalizationContext()
public
getLocalizationContext() : LocalizationContext|null
Return values
LocalizationContext|nullgetRouterDispatcher()
public
getRouterDispatcher() : RouterDispatcher
Return values
RouterDispatchergetSettingContext()
public
getSettingContext() : SettingContext
Return values
SettingContextgetSettings()
public
getSettings() : array<int, array<string, mixed>>
Return values
array<int, array<string, mixed>>getThemeContext()
public
getThemeContext() : ThemeContext|null
Return values
ThemeContext|nullhandleSiblings()
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
Return values
boolinitializeAllContexts()
public
initializeAllContexts() : void
injectDeviceDetector()
public
injectDeviceDetector(DeviceDetector $detector) : void
Parameters
- $detector : DeviceDetector
onCreate()
public
onCreate() : void
render()
public
render() : void
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|nullsetAppContext()
public
setAppContext(AppContext $appContext) : $this
Parameters
- $appContext : AppContext
Return values
$thissetComponentParameter()
Sets a component parameter.
public
setComponentParameter(string $name, mixed $value) : void
Parameters
- $name : string
- $value : mixed
setConfig()
public
setConfig(TreePositionConfig $config) : self
Parameters
- $config : TreePositionConfig
Return values
selfsetCurrencyContext()
public
setCurrencyContext(CurrencyContext|null $currencyContext) : $this
Parameters
- $currencyContext : CurrencyContext|null
Return values
$thissetLanguageContext()
public
setLanguageContext(LanguageContext|null $languageContext) : $this
Parameters
- $languageContext : LanguageContext|null
Return values
$thissetLocalizationContext()
public
setLocalizationContext(LocalizationContext|null $localizationContext) : $this
Parameters
- $localizationContext : LocalizationContext|null
Return values
$thissetSettingContext()
public
setSettingContext(SettingContext $settingContext) : $this
Parameters
- $settingContext : SettingContext
Return values
$thissetThemeContext()
public
setThemeContext(ThemeContext|null $themeContext) : $this
Parameters
- $themeContext : ThemeContext|null
Return values
$thissetup()
public
setup(BasePresenter|BasePresenter $presenter) : void
Parameters
- $presenter : BasePresenter|BasePresenter
setupAppContext()
public
setupAppContext(AppContext $appContext) : void
Parameters
- $appContext : AppContext
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
Return values
TfrontPresenter()
Returns the front presenter the component is attached to (null outside the front end or when detached).
protected
frontPresenter() : BasePresenter|null
Return values
BasePresenter|nullgetTranslator()
protected
getTranslator() : ITranslator
Return values
ITranslatorsetTemplateFile()
protected
setTemplateFile(string $dir, string $filename) : void
Parameters
- $dir : string
- $filename : string
setTranslator()
protected
setTranslator(ITranslator $translator) : self
Parameters
- $translator : ITranslator
Return values
selfcreateMultiplierComponent()
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|nullcreateStandardComponent()
Creates a standard component (not a multiplier).
private
createStandardComponent(string $name) : IComponent|null
Parameters
- $name : string
Return values
IComponent|nullnormalizeId()
private
normalizeId(mixed $value) : int|null
Parameters
- $value : mixed
Return values
int|nullresolveForm()
Host form, searched upward from the component (presenter or component, same as the Picker).
private
resolveForm() : Form|null
Return values
Form|nullresolveLangId()
private
resolveLangId() : int|null