Is there a way to encode/decode the initializer function with its arguments

I am learning from here: https://docs.openzeppelin.com/upgrades/2.8/creating-upgradeable-from-solidity#encoding_call_data
Screenshot from 2020-07-05 22-57-39
Before making my factory and the contract instantiated from the factory upgradeable (as you can see from the picture above), the factory could access the name that was passed as an argument to the constructor of the token contract whose instance is to be created.

Screenshot from 2020-07-05 22-59-23
But after making the contract that was instantiated from upgradeable contract upgradeable, I now don’t have access to the token’s name argument that I previously had.
I am thinking I could solve this by two methods:

  1. Pass both name and symbol as args to createToken() method, then encode func name and args in the contract itself, and then pass it to the contract whose instance is to be created.
  2. OR pass the encoded data into the createToken() method and pass it directly to the contract to be instantiated. At the same time, I could decode it in the contract itself, and get the token name.

Is there any way I could do this? Or is there another way around for this?

Closing this as a duplicate of Encoding function call data from upgradeable contract itself.