Bem-vindo ao mundo da análise e das abstrações, Mateus. No começo da minha carreira, aprendi que um bom desenvolvedor é percebido pela sua capacidade de abstrair.
Quando estamos no inicio de uma feature assim, o melhor é ter uma maquete do resultado desejado.
Por exemplo: Arrastar botões e caixas de texto e montar algo que visualmente se pareça com um formulário. Então coloque na sua tela botões e elementos e experimente arrastar de um lado para outro.
Conseguido isso, o próximo passo é distinguir os 'containers': Determinar um container que seja seu "banco de componentes".
Depois determinar o container que seja seu "campo de componentes utilizados".
Feito essa distinção, vc ja tem dois campos diferentes e ja tem componentes para arrastar.
Agora vc vai permitir somente arrastar o componente do 'Banco' até o 'Campo', nunca o contrário.
Depois, crie um botão fora desses dois campos, chame de 'Create Form', pode ficar acima de tudo e a direita, e lá vc tem então o trigger de salvar esse formulário.
aí vc precisará ter seu back end configurado pra receber os dados do formulário. Precisa ser um modelo flexivel, ja que a quantidade de campos vai variar. A partir daqui, são muitas possibilidades de resolução, desde restringir um pouco quantos componentes podem ser usados, para que faca sentido em um banco de dados, até deixar uma liberdade bem grande, mas que vai custar processamento e vai exigir uma abstração maior.
Olha, acho que ja falei bastante aqui, mas novamente eu digo, bem-vindo, e boa sorte na caminhada. faça, erre, aprenda, acerte, esse é o caminho.
Qualque coisa entre em contato comigo, github.com/gerfalcao