Add dropdown to change apis (and an un-used, but POC method to list apis on a page...)

This commit is contained in:
2023-04-27 11:05:02 -05:00
parent 8cc16d44e5
commit dab6a75340
2 changed files with 48 additions and 1 deletions

View File

@ -45,6 +45,7 @@ import com.kingsrook.qqq.api.model.actions.GenerateOpenApiSpecOutput;
import com.kingsrook.qqq.api.model.metadata.APILogMetaDataProvider;
import com.kingsrook.qqq.api.model.metadata.ApiInstanceMetaData;
import com.kingsrook.qqq.api.model.metadata.ApiInstanceMetaDataContainer;
import com.kingsrook.qqq.api.model.metadata.ApiInstanceMetaDataProvider;
import com.kingsrook.qqq.api.model.metadata.ApiOperation;
import com.kingsrook.qqq.api.model.metadata.tables.ApiTableMetaData;
import com.kingsrook.qqq.api.model.metadata.tables.ApiTableMetaDataContainer;
@ -166,6 +167,8 @@ public class QJavalinApiHandler
ApiBuilder.get("/apis.json", QJavalinApiHandler::doGetApisJson);
// todo not this? ApiBuilder.get("/api/", QJavalinApiHandler::doListApis);
ApiInstanceMetaDataContainer apiInstanceMetaDataContainer = ApiInstanceMetaDataContainer.of(qInstance);
for(Map.Entry<String, ApiInstanceMetaData> entry : apiInstanceMetaDataContainer.getApis().entrySet())
{
@ -237,6 +240,32 @@ public class QJavalinApiHandler
/*******************************************************************************
**
*******************************************************************************/
private static void doListApis(Context context)
{
ApiInstanceMetaDataContainer apiInstanceMetaDataContainer = ApiInstanceMetaDataContainer.of(qInstance);
StringBuilder html = new StringBuilder("<h1>Select an API</h1>\n<ul>\n");
for(Map.Entry<String, ApiInstanceMetaData> entry : apiInstanceMetaDataContainer.getApis().entrySet())
{
html.append("""
<li><a href="{link}">{name}</a></li>
"""
.replace("{link}", entry.getValue().getPath())
.replace("{name}", entry.getValue().getLabel())
);
}
html.append("</ul>");
context.header("Content-Type", ContentType.HTML);
context.result(html.toString());
}
/*******************************************************************************
**
*******************************************************************************/
@ -601,6 +630,14 @@ public class QJavalinApiHandler
html = html.replace("{title}", apiInstanceMetaData.getLabel() + " - " + version);
StringBuilder otherApisOptions = new StringBuilder();
ApiInstanceMetaDataContainer apiInstanceMetaDataContainer = ApiInstanceMetaDataContainer.of(qInstance);
for(Map.Entry<String, ApiInstanceMetaData> entry : apiInstanceMetaDataContainer.getApis().entrySet())
{
otherApisOptions.append("<option value=\"").append(entry.getValue().getPath()).append("\">").append(entry.getValue().getLabel()).append("</option>");
}
html = html.replace("{otherApisOptions}", otherApisOptions.toString());
StringBuilder otherVersionOptions = new StringBuilder();
for(APIVersion supportedVersion : apiInstanceMetaData.getSupportedVersions())
{

View File

@ -49,7 +49,12 @@
>
{navLogoImg}
<div slot="overview" id="otherVersions">
<label for="otherVersionsSelect">Other Versions:</label>
<label for="otherApisSelect">Other APIs:</label>
<select id="otherApisSelect" onchange=changeApi()>
<option value="/api/">--</option>
{otherApisOptions}
</select>
<label for="otherVersionsSelect">Other Versions of this API:</label>
<select id="otherVersionsSelect" onchange=changeVersion()>
<option value="/api/">--</option>
{otherVersionOptions}
@ -76,6 +81,11 @@
});
});
function changeApi()
{
document.location.href = document.getElementById("otherApisSelect").value;
}
function changeVersion()
{
document.location.href = document.getElementById("otherVersionsSelect").value;