refactor: use Laravel route() helper for shared variable URLs
- Replace hardcoded URL paths in getScopeUrl() with Laravel's route() helper - Add scopeUrls property to EnvVarInput component with named routes - Pass projectUuid and environmentUuid to enable context-specific environment links - Environment scope link now navigates to the specific project/environment shared variables page 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
01d3f07934
commit
4147cfa537
3 changed files with 23 additions and 10 deletions
|
|
@ -14,6 +14,8 @@ class EnvVarInput extends Component
|
||||||
|
|
||||||
public ?string $htmlId = null;
|
public ?string $htmlId = null;
|
||||||
|
|
||||||
|
public array $scopeUrls = [];
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
public ?string $id = null,
|
public ?string $id = null,
|
||||||
public ?string $name = null,
|
public ?string $name = null,
|
||||||
|
|
@ -33,6 +35,8 @@ public function __construct(
|
||||||
public mixed $canResource = null,
|
public mixed $canResource = null,
|
||||||
public bool $autoDisable = true,
|
public bool $autoDisable = true,
|
||||||
public array $availableVars = [],
|
public array $availableVars = [],
|
||||||
|
public ?string $projectUuid = null,
|
||||||
|
public ?string $environmentUuid = null,
|
||||||
) {
|
) {
|
||||||
// Handle authorization-based disabling
|
// Handle authorization-based disabling
|
||||||
if ($this->canGate && $this->canResource && $this->autoDisable) {
|
if ($this->canGate && $this->canResource && $this->autoDisable) {
|
||||||
|
|
@ -68,6 +72,18 @@ public function render(): View|Closure|string
|
||||||
$this->name = $this->modelBinding !== 'null' ? $this->modelBinding : (string) $this->id;
|
$this->name = $this->modelBinding !== 'null' ? $this->modelBinding : (string) $this->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->scopeUrls = [
|
||||||
|
'team' => route('shared-variables.team.index'),
|
||||||
|
'project' => route('shared-variables.project.index'),
|
||||||
|
'environment' => $this->projectUuid && $this->environmentUuid
|
||||||
|
? route('shared-variables.environment.show', [
|
||||||
|
'project_uuid' => $this->projectUuid,
|
||||||
|
'environment_uuid' => $this->environmentUuid,
|
||||||
|
])
|
||||||
|
: route('shared-variables.environment.index'),
|
||||||
|
'default' => route('shared-variables.index'),
|
||||||
|
];
|
||||||
|
|
||||||
return view('components.forms.env-var-input');
|
return view('components.forms.env-var-input');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
currentScope: null,
|
currentScope: null,
|
||||||
availableScopes: ['team', 'project', 'environment'],
|
availableScopes: ['team', 'project', 'environment'],
|
||||||
availableVars: @js($availableVars),
|
availableVars: @js($availableVars),
|
||||||
|
scopeUrls: @js($scopeUrls),
|
||||||
|
|
||||||
isAutocompleteDisabled() {
|
isAutocompleteDisabled() {
|
||||||
const hasAnyVars = Object.values(this.availableVars).some(vars => vars.length > 0);
|
const hasAnyVars = Object.values(this.availableVars).some(vars => vars.length > 0);
|
||||||
|
|
@ -28,13 +29,14 @@
|
||||||
const input = this.$refs.input;
|
const input = this.$refs.input;
|
||||||
if (!input) return;
|
if (!input) return;
|
||||||
|
|
||||||
|
const value = input.value || '';
|
||||||
|
|
||||||
if (this.isAutocompleteDisabled()) {
|
if (this.isAutocompleteDisabled()) {
|
||||||
this.showDropdown = false;
|
this.showDropdown = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.cursorPosition = input.selectionStart || 0;
|
this.cursorPosition = input.selectionStart || 0;
|
||||||
const value = input.value || '';
|
|
||||||
const textBeforeCursor = value.substring(0, this.cursorPosition);
|
const textBeforeCursor = value.substring(0, this.cursorPosition);
|
||||||
|
|
||||||
const openBraces = '{' + '{';
|
const openBraces = '{' + '{';
|
||||||
|
|
@ -107,14 +109,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
getScopeUrl(scope) {
|
getScopeUrl(scope) {
|
||||||
if (scope === 'team') {
|
return this.scopeUrls[scope] || this.scopeUrls['default'];
|
||||||
return '/shared-variables/team';
|
|
||||||
} else if (scope === 'project') {
|
|
||||||
return '/shared-variables/projects';
|
|
||||||
} else if (scope === 'environment') {
|
|
||||||
return '/shared-variables/environments';
|
|
||||||
}
|
|
||||||
return '/shared-variables';
|
|
||||||
},
|
},
|
||||||
|
|
||||||
selectSuggestion(suggestion) {
|
selectSuggestion(suggestion) {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,9 @@
|
||||||
<x-forms.textarea x-show="$wire.is_multiline === true" x-cloak id="value" label="Value" required />
|
<x-forms.textarea x-show="$wire.is_multiline === true" x-cloak id="value" label="Value" required />
|
||||||
<x-forms.env-var-input x-show="$wire.is_multiline === false" x-cloak placeholder="production" id="value"
|
<x-forms.env-var-input x-show="$wire.is_multiline === false" x-cloak placeholder="production" id="value"
|
||||||
x-bind:label="$wire.is_multiline === false && 'Value'" required
|
x-bind:label="$wire.is_multiline === false && 'Value'" required
|
||||||
:availableVars="$shared ? [] : $this->availableSharedVariables" />
|
:availableVars="$shared ? [] : $this->availableSharedVariables"
|
||||||
|
:projectUuid="data_get($parameters, 'project_uuid')"
|
||||||
|
:environmentUuid="data_get($parameters, 'environment_uuid')" />
|
||||||
|
|
||||||
@if (!$shared)
|
@if (!$shared)
|
||||||
<div x-show="$wire.is_multiline === false" x-cloak class="text-xs text-neutral-500 dark:text-neutral-400 -mt-1">
|
<div x-show="$wire.is_multiline === false" x-cloak class="text-xs text-neutral-500 dark:text-neutral-400 -mt-1">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue