Skip to content

Commit 4e72296

Browse files
authored
Auto set site user when entering domain (#1020)
1 parent fc67441 commit 4e72296

3 files changed

Lines changed: 31 additions & 6 deletions

File tree

resources/js/components/ui/tags-input.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ export function TagsInput({
5757
};
5858

5959
const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
60-
if (e.key === 'Enter' || e.key === 'Tab') {
60+
if (e.key === 'Enter') {
61+
e.preventDefault();
62+
addTag(inputValue);
63+
} else if (e.key === 'Tab' && inputValue.trim()) {
6164
e.preventDefault();
6265
addTag(inputValue);
6366
} else if (e.key === 'Backspace' && !inputValue && tags.length > 0) {

resources/js/pages/sites/components/create-site.tsx

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ type CreateSiteForm = {
3535
user: string;
3636
};
3737

38+
function extractNameFromDomain(domain: string): string {
39+
if (!domain) return '';
40+
let name = domain.replace(/^https?:\/\//, '');
41+
name = name.replace(/^www\./, '');
42+
const parts = name.split('.');
43+
if (parts.length > 0 && parts[0]) {
44+
return parts[0].toLowerCase().replace(/[^a-z0-9]/g, '');
45+
}
46+
return '';
47+
}
48+
3849
export default function CreateSite({
3950
server,
4051
defaultOpen,
@@ -48,6 +59,7 @@ export default function CreateSite({
4859
}) {
4960
const page = usePage<SharedData>();
5061
const [open, setOpen] = useState(defaultOpen || false);
62+
const [userManuallyEdited, setUserManuallyEdited] = useState(false);
5163

5264
useEffect(() => {
5365
if (defaultOpen !== undefined) {
@@ -64,7 +76,7 @@ export default function CreateSite({
6476

6577
const form = useForm<CreateSiteForm>({
6678
server: server?.id.toString() || '',
67-
type: 'php',
79+
type: 'laravel',
6880
domain: '',
6981
aliases: [],
7082
php_version: '',
@@ -260,7 +272,14 @@ export default function CreateSite({
260272
id="domain"
261273
type="text"
262274
value={form.data.domain}
263-
onChange={(e) => form.setData('domain', e.target.value)}
275+
onChange={(e) => {
276+
const newDomain = e.target.value;
277+
form.setData('domain', newDomain);
278+
if (!userManuallyEdited) {
279+
const extractedName = extractNameFromDomain(newDomain);
280+
form.setData('user', extractedName);
281+
}
282+
}}
264283
placeholder="vitodeploy.com"
265284
/>
266285
<InputError message={form.errors.domain} />
@@ -292,7 +311,7 @@ export default function CreateSite({
292311
<Tooltip>
293312
<TooltipTrigger asChild>
294313
<DialogTrigger asChild>
295-
<button type="button" className="text-muted-foreground hover:text-foreground">
314+
<button type="button" tabIndex={-1} className="text-muted-foreground hover:text-foreground">
296315
<HelpCircle className="h-4 w-4" />
297316
</button>
298317
</DialogTrigger>
@@ -316,7 +335,10 @@ export default function CreateSite({
316335
id="user"
317336
type="text"
318337
value={form.data.user}
319-
onChange={(e) => form.setData('user', e.target.value)}
338+
onChange={(e) => {
339+
setUserManuallyEdited(true);
340+
form.setData('user', e.target.value);
341+
}}
320342
placeholder="e.g. mysite"
321343
/>
322344
<p className="text-muted-foreground text-xs">The isolated user for the site. Must be unique on the server.</p>

tests/Unit/Models/ServerModelTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public function test_exec_wraps_command_when_using_custom_user(): void
9999

100100
$expected = <<<'BASH'
101101
sudo -u deploy bash <<'EOF'
102-
pwd
102+
set -e; pwd
103103
ls -la
104104
EOF
105105
BASH;

0 commit comments

Comments
 (0)