feat: add "display_order" column to coder_parameter to keep parameters sorted in UI (#8227)

This commit is contained in:
Marcin Tojek
2023-06-30 12:41:55 +02:00
committed by GitHub
parent 72a48bee52
commit 6639c69fad
23 changed files with 969 additions and 482 deletions

View File

@ -2410,6 +2410,12 @@ func (q *fakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVe
}
parameters = append(parameters, param)
}
sort.Slice(parameters, func(i, j int) bool {
if parameters[i].DisplayOrder != parameters[j].DisplayOrder {
return parameters[i].DisplayOrder < parameters[j].DisplayOrder
}
return strings.ToLower(parameters[i].Name) < strings.ToLower(parameters[j].Name)
})
return parameters, nil
}
@ -3934,6 +3940,7 @@ func (q *fakeQuerier) InsertTemplateVersionParameter(_ context.Context, arg data
ValidationMax: arg.ValidationMax,
ValidationMonotonic: arg.ValidationMonotonic,
Required: arg.Required,
DisplayOrder: arg.DisplayOrder,
LegacyVariableName: arg.LegacyVariableName,
}
q.templateVersionParameters = append(q.templateVersionParameters, param)

View File

@ -461,6 +461,7 @@ CREATE TABLE template_version_parameters (
required boolean DEFAULT true NOT NULL,
legacy_variable_name text DEFAULT ''::text NOT NULL,
display_name text DEFAULT ''::text NOT NULL,
display_order integer DEFAULT 0 NOT NULL,
CONSTRAINT validation_monotonic_order CHECK ((validation_monotonic = ANY (ARRAY['increasing'::text, 'decreasing'::text, ''::text])))
);
@ -494,6 +495,8 @@ COMMENT ON COLUMN template_version_parameters.legacy_variable_name IS 'Name of t
COMMENT ON COLUMN template_version_parameters.display_name IS 'Display name of the rich parameter';
COMMENT ON COLUMN template_version_parameters.display_order IS 'Specifies the order in which to display parameters in user interfaces.';
CREATE TABLE template_version_variables (
template_version_id uuid NOT NULL,
name text NOT NULL,

View File

@ -0,0 +1 @@
ALTER TABLE template_version_parameters DROP COLUMN display_order;

View File

@ -0,0 +1,4 @@
ALTER TABLE template_version_parameters ADD COLUMN display_order integer NOT NULL DEFAULT 0;
COMMENT ON COLUMN template_version_parameters.display_order
IS 'Specifies the order in which to display parameters in user interfaces.';

View File

@ -1631,6 +1631,8 @@ type TemplateVersionParameter struct {
LegacyVariableName string `db:"legacy_variable_name" json:"legacy_variable_name"`
// Display name of the rich parameter
DisplayName string `db:"display_name" json:"display_name"`
// Specifies the order in which to display parameters in user interfaces.
DisplayOrder int32 `db:"display_order" json:"display_order"`
}
type TemplateVersionVariable struct {

View File

@ -4153,7 +4153,7 @@ func (q *sqlQuerier) UpdateTemplateScheduleByID(ctx context.Context, arg UpdateT
}
const getTemplateVersionParameters = `-- name: GetTemplateVersionParameters :many
SELECT template_version_id, name, description, type, mutable, default_value, icon, options, validation_regex, validation_min, validation_max, validation_error, validation_monotonic, required, legacy_variable_name, display_name FROM template_version_parameters WHERE template_version_id = $1
SELECT template_version_id, name, description, type, mutable, default_value, icon, options, validation_regex, validation_min, validation_max, validation_error, validation_monotonic, required, legacy_variable_name, display_name, display_order FROM template_version_parameters WHERE template_version_id = $1 ORDER BY display_order ASC, LOWER(name) ASC
`
func (q *sqlQuerier) GetTemplateVersionParameters(ctx context.Context, templateVersionID uuid.UUID) ([]TemplateVersionParameter, error) {
@ -4182,6 +4182,7 @@ func (q *sqlQuerier) GetTemplateVersionParameters(ctx context.Context, templateV
&i.Required,
&i.LegacyVariableName,
&i.DisplayName,
&i.DisplayOrder,
); err != nil {
return nil, err
}
@ -4214,7 +4215,8 @@ INSERT INTO
validation_monotonic,
required,
legacy_variable_name,
display_name
display_name,
display_order
)
VALUES
(
@ -4233,8 +4235,9 @@ VALUES
$13,
$14,
$15,
$16
) RETURNING template_version_id, name, description, type, mutable, default_value, icon, options, validation_regex, validation_min, validation_max, validation_error, validation_monotonic, required, legacy_variable_name, display_name
$16,
$17
) RETURNING template_version_id, name, description, type, mutable, default_value, icon, options, validation_regex, validation_min, validation_max, validation_error, validation_monotonic, required, legacy_variable_name, display_name, display_order
`
type InsertTemplateVersionParameterParams struct {
@ -4254,6 +4257,7 @@ type InsertTemplateVersionParameterParams struct {
Required bool `db:"required" json:"required"`
LegacyVariableName string `db:"legacy_variable_name" json:"legacy_variable_name"`
DisplayName string `db:"display_name" json:"display_name"`
DisplayOrder int32 `db:"display_order" json:"display_order"`
}
func (q *sqlQuerier) InsertTemplateVersionParameter(ctx context.Context, arg InsertTemplateVersionParameterParams) (TemplateVersionParameter, error) {
@ -4274,6 +4278,7 @@ func (q *sqlQuerier) InsertTemplateVersionParameter(ctx context.Context, arg Ins
arg.Required,
arg.LegacyVariableName,
arg.DisplayName,
arg.DisplayOrder,
)
var i TemplateVersionParameter
err := row.Scan(
@ -4293,6 +4298,7 @@ func (q *sqlQuerier) InsertTemplateVersionParameter(ctx context.Context, arg Ins
&i.Required,
&i.LegacyVariableName,
&i.DisplayName,
&i.DisplayOrder,
)
return i, err
}

View File

@ -16,7 +16,8 @@ INSERT INTO
validation_monotonic,
required,
legacy_variable_name,
display_name
display_name,
display_order
)
VALUES
(
@ -35,8 +36,9 @@ VALUES
$13,
$14,
$15,
$16
$16,
$17
) RETURNING *;
-- name: GetTemplateVersionParameters :many
SELECT * FROM template_version_parameters WHERE template_version_id = $1;
SELECT * FROM template_version_parameters WHERE template_version_id = $1 ORDER BY display_order ASC, LOWER(name) ASC;

View File

@ -825,6 +825,7 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
ValidationMax: validationMax,
ValidationMonotonic: richParameter.ValidationMonotonic,
Required: richParameter.Required,
DisplayOrder: richParameter.Order,
LegacyVariableName: richParameter.LegacyVariableName,
})
if err != nil {

View File

@ -1291,3 +1291,93 @@ func TestTemplateVersionPatch(t *testing.T) {
require.Error(t, err)
})
}
func TestTemplateVersionParameters_Order(t *testing.T) {
t.Parallel()
const (
firstParameterName = "first_parameter"
firstParameterType = "string"
firstParameterValue = "aaa"
// no order
secondParameterName = "Second_parameter"
secondParameterType = "number"
secondParameterValue = "2"
secondParameterOrder = 3
thirdParameterName = "third_parameter"
thirdParameterType = "number"
thirdParameterValue = "3"
thirdParameterOrder = 3
fourthParameterName = "Fourth_parameter"
fourthParameterType = "number"
fourthParameterValue = "3"
fourthParameterOrder = 2
fifthParameterName = "Fifth_parameter"
fifthParameterType = "string"
fifthParameterValue = "aaa"
// no order
)
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
user := coderdtest.CreateFirstUser(t, client)
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
Parse: echo.ParseComplete,
ProvisionPlan: []*proto.Provision_Response{
{
Type: &proto.Provision_Response_Complete{
Complete: &proto.Provision_Complete{
Parameters: []*proto.RichParameter{
{
Name: firstParameterName,
Type: firstParameterType,
// No order
},
{
Name: secondParameterName,
Type: secondParameterType,
Order: secondParameterOrder,
},
{
Name: thirdParameterName,
Type: thirdParameterType,
Order: thirdParameterOrder,
},
{
Name: fourthParameterName,
Type: fourthParameterType,
Order: fourthParameterOrder,
},
{
Name: fifthParameterName,
Type: fifthParameterType,
// No order
},
},
},
},
},
},
ProvisionApply: []*proto.Provision_Response{{
Type: &proto.Provision_Response_Complete{
Complete: &proto.Provision_Complete{},
},
}},
})
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
defer cancel()
templateRichParameters, err := client.TemplateVersionRichParameters(ctx, version.ID)
require.NoError(t, err)
require.Len(t, templateRichParameters, 5)
require.Equal(t, fifthParameterName, templateRichParameters[0].Name)
require.Equal(t, firstParameterName, templateRichParameters[1].Name)
require.Equal(t, fourthParameterName, templateRichParameters[2].Name)
require.Equal(t, secondParameterName, templateRichParameters[3].Name)
require.Equal(t, thirdParameterName, templateRichParameters[4].Name)
}