Skip to content

Commit

Permalink
NEOS-605:Category transformer (#1050)
Browse files Browse the repository at this point in the history
  • Loading branch information
evisdrenova committed Jan 7, 2024
1 parent 5a585c1 commit 8f139f5
Show file tree
Hide file tree
Showing 16 changed files with 823 additions and 227 deletions.
540 changes: 313 additions & 227 deletions backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go

Large diffs are not rendered by default.

145 changes: 145 additions & 0 deletions backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.validate.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions backend/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ require (
github.com/denisenkom/go-mssqldb v0.12.3 // indirect
github.com/dlclark/regexp2 v1.7.0 // indirect
github.com/docker/cli v23.0.3+incompatible // indirect
github.com/dop251/goja_nodejs v0.0.0-20220808115320-bac29516aae9 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
github.com/eapache/go-resiliency v1.4.0 // indirect
Expand Down
5 changes: 5 additions & 0 deletions backend/protos/mgmt/v1alpha1/transformer.proto
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ message TransformerConfig {
UserDefinedTransformerConfig user_defined_transformer_config = 37;
GenerateDefault generate_default_config = 38;
TransformJavascript transform_javascript_config = 39;
GenerateCategorical generate_categorical_config = 40;
}
}

Expand Down Expand Up @@ -270,6 +271,10 @@ message ValidateUserJavascriptCodeResponse {
bool valid = 1;
}

message GenerateCategorical {
string categories = 1;
}

service TransformersService {
rpc GetSystemTransformers(GetSystemTransformersRequest) returns (GetSystemTransformersResponse) {}
rpc GetUserDefinedTransformers(GetUserDefinedTransformersRequest) returns (GetUserDefinedTransformersResponse) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ const (
Null Transformation = "null"
Invalid Transformation = "invalid"
TransformJavascript Transformation = "transform_javascript"
GenerateCategorical Transformation = "generate_categorical"
)

func (s *Service) GetSystemTransformers(
Expand Down Expand Up @@ -531,6 +532,19 @@ return input;`},
},
},
},
{
Name: "Generate Categorical",
Description: "Randomly selects a value from a predefined list of values",
DataType: "string",
Source: string(GenerateCategorical),
Config: &mgmtv1alpha1.TransformerConfig{
Config: &mgmtv1alpha1.TransformerConfig_GenerateCategoricalConfig{
GenerateCategoricalConfig: &mgmtv1alpha1.GenerateCategorical{
Categories: "value1,value2",
},
},
},
},
},
}), nil
}
Expand Down
17 changes: 17 additions & 0 deletions backend/sql/postgresql/models/transformers.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ type TransformerConfigs struct {
Null *NullConfig `json:"null,omitempty"`
UserDefinedTransformer *UserDefinedTransformerConfig `json:"userDefinedTransformer,omitempty"`
TransformJavascript *TransformJavascriptConfig `json:"transformJavascript,omitempty"`
GenerateCategorical *GenerateCategoricalConfig `json:"generateCategorical,omitempty"`
}

type GenerateEmailConfig struct{}
Expand Down Expand Up @@ -180,6 +181,10 @@ type TransformJavascriptConfig struct {
Code string `json:"code"`
}

type GenerateCategoricalConfig struct {
Categories string `json:"categories"`
}

// from API -> DB
func (t *JobMappingTransformerModel) FromTransformerDto(tr *mgmtv1alpha1.JobMappingTransformer) error {

Expand Down Expand Up @@ -328,6 +333,10 @@ func (t *TransformerConfigs) FromTransformerConfigDto(tr *mgmtv1alpha1.Transform
t.TransformJavascript = &TransformJavascriptConfig{
Code: tr.GetTransformJavascriptConfig().Code,
}
case *mgmtv1alpha1.TransformerConfig_GenerateCategoricalConfig:
t.GenerateCategorical = &GenerateCategoricalConfig{
Categories: tr.GetGenerateCategoricalConfig().Categories,
}
default:
t = &TransformerConfigs{}
}
Expand Down Expand Up @@ -629,6 +638,14 @@ func (t *TransformerConfigs) ToTransformerConfigDto() *mgmtv1alpha1.TransformerC
},
},
}
case t.GenerateCategorical != nil:
return &mgmtv1alpha1.TransformerConfig{
Config: &mgmtv1alpha1.TransformerConfig_GenerateCategoricalConfig{
GenerateCategoricalConfig: &mgmtv1alpha1.GenerateCategorical{
Categories: t.GenerateCategorical.Categories,
},
},
}
default:
return &mgmtv1alpha1.TransformerConfig{}
}
Expand Down
36 changes: 36 additions & 0 deletions docs/protos/data/proto_docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -3154,6 +3154,30 @@
}
]
},
{
"name": "GenerateCategorical",
"longName": "GenerateCategorical",
"fullName": "mgmt.v1alpha1.GenerateCategorical",
"description": "",
"hasExtensions": false,
"hasFields": true,
"hasOneofs": false,
"extensions": [],
"fields": [
{
"name": "categories",
"description": "",
"label": "",
"type": "string",
"longType": "string",
"fullType": "string",
"ismap": false,
"isoneof": false,
"oneofdecl": "",
"defaultValue": ""
}
]
},
{
"name": "GenerateCity",
"longName": "GenerateCity",
Expand Down Expand Up @@ -4656,6 +4680,18 @@
"isoneof": true,
"oneofdecl": "config",
"defaultValue": ""
},
{
"name": "generate_categorical_config",
"description": "",
"label": "",
"type": "GenerateCategorical",
"longType": "GenerateCategorical",
"fullType": "mgmt.v1alpha1.GenerateCategorical",
"ismap": false,
"isoneof": true,
"oneofdecl": "config",
"defaultValue": ""
}
]
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { ReactElement } from 'react';
import UserDefinedGenerateCardNumberForm from './UserDefinedGenerateCardNumber';
import UserDefinedGenerateCategoricalForm from './UserDefinedGenerateCategoricalForm';
import UserDefinedGenerateE164NumberForm from './UserDefinedGenerateE164PhoneNumberForm';
import UserDefinedGenerateFloat64Form from './UserDefinedGenerateFloat64Form';
import UserDefinedGenerateGenderForm from './UserDefinedGenerateGenderForm';
Expand Down Expand Up @@ -27,6 +28,8 @@ export function handleUserDefinedTransformerForm(
switch (value) {
case 'generate_card_number':
return <UserDefinedGenerateCardNumberForm isDisabled={disabled} />;
case 'generate_categorical':
return <UserDefinedGenerateCategoricalForm isDisabled={disabled} />;
case 'generate_e164_phone_number':
return <UserDefinedGenerateE164NumberForm isDisabled={disabled} />;
case 'generate_float64':
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
'use client';
import {
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
} from '@/components/ui/form';
import { Input } from '@/components/ui/input';
import { ReactElement } from 'react';
import { useFormContext } from 'react-hook-form';
import {
CreateUserDefinedTransformerSchema,
UpdateUserDefinedTransformer,
} from '../schema';
interface Props {
isDisabled?: boolean;
}

export default function UserDefinedGenerateCategoricalForm(
props: Props
): ReactElement {
const fc = useFormContext<
UpdateUserDefinedTransformer | CreateUserDefinedTransformerSchema
>();

const { isDisabled } = props;

return (
<div className="flex flex-col w-full space-y-4 pt-4">
<FormField
name={`config.value.categories`}
control={fc.control}
render={({ field }) => (
<FormItem className="flex flex-row items-center justify-between rounded-lg border dark:border-gray-700 p-3 shadow-sm">
<div className="space-y-0.5">
<FormLabel>Categories</FormLabel>
<FormDescription>
Provide a list of comma-separated string values that you want to
randomly select from.
</FormDescription>
</div>
<FormControl>
<div className="w-[600px]">
<Input
value={field.value}
type="string"
onChange={field.onChange}
disabled={isDisabled}
/>
</div>
</FormControl>
</FormItem>
)}
/>
</div>
);
}
5 changes: 5 additions & 0 deletions frontend/apps/web/app/[account]/new/transformer/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,10 @@ const transformJavascriptConfig = Yup.object().shape({
),
});

const generateCategoricalConfig = Yup.object().shape({
categories: Yup.string().required('This field is required.'),
});

type ConfigType = TransformerConfig['config'];

// Helper function to extract the 'case' property from a config type
Expand Down Expand Up @@ -249,6 +253,7 @@ const TRANSFORMER_SCHEMA_CONFIGS: Record<
transformStringConfig: transformStringConfig,
userDefinedTransformerConfig: userDefinedTransformerConfig,
transformJavascriptConfig: transformJavascriptConfig,
generateCategoricalConfig: generateCategoricalConfig,
};

export const TransformerConfigSchema = Yup.lazy((v) => {
Expand Down
Loading

1 comment on commit 8f139f5

@vercel
Copy link

@vercel vercel bot commented on 8f139f5 Jan 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.