e46b8109fd1277a3abbda51a7da0434863eabc77
kent
  Fri Jan 29 16:10:27 2021 -0800
Removed second table that was there just for testing.  Transitioning away from table for metadata to tab-sep-file.

diff --git src/hg/hgFacetedBars/hgFacetedBars.c src/hg/hgFacetedBars/hgFacetedBars.c
index 83ea6ae..ab18573 100644
--- src/hg/hgFacetedBars/hgFacetedBars.c
+++ src/hg/hgFacetedBars/hgFacetedBars.c
@@ -2,30 +2,31 @@
 #include <sys/time.h>
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 #include "jksql.h"
 #include "htmshell.h"
 #include "web.h"
 #include "cheapcgi.h"
 #include "cart.h"
 #include "hui.h"
 #include "udc.h"
 #include "knetUdc.h"
 #include "genbank.h"
 #include "tablesTables.h"
+#include "facetField.h"
 
 /* Global Variables */
 struct cart *cart;             /* CGI and other variables */
 struct hash *oldVars = NULL;
 char *database = NULL;
 char *genome = NULL;
 
 struct facetedTable
 /* Help manage a faceted table */
     {
     struct facetedTable *next;
     char *name;		/* Name of file or database table */
     char *varPrefix;	/* Prefix used on variables */
     };
 
@@ -92,31 +93,30 @@
 /* Look up sel val in cart */
 {
 char var[256];
 safef(var, sizeof(var), "%s_facet_fieldVal", ft->varPrefix);
 return cartOptionalString(cart, var);
 }
 
 char *facetedTableSelList(struct facetedTable *ft, struct cart *cart)
 /* Look up sel val in cart */
 {
 char var[256];
 safef(var, sizeof(var), "%s_facet_selList", ft->varPrefix);
 return cartOptionalString(cart, var);
 }
 
-
 void facetedTableRemoveOpVars(struct facetedTable *ft, struct cart *cart)
 /* Remove sel op/field/name vars from cart */
 {
 char var[256];
 safef(var, sizeof(var), "%s_facet_op", ft->varPrefix);
 cartRemove(cart, var);
 safef(var, sizeof(var), "%s_facet_fieldVal", ft->varPrefix);
 cartRemove(cart, var);
 safef(var, sizeof(var), "%s_facet_fieldName", ft->varPrefix);
 cartRemove(cart, var);
 }
 
 boolean facetedTableUpdateOnFacetClick(struct facetedTable *ft, struct cart *cart)
 /* If we got called by a click on a facet deal with that and return TRUE, else do
  * nothing and return false */
@@ -136,72 +136,81 @@
 	char *newSelectedFacetValues = linearizeFacetVals(selList);
 	cartSetString(cart, selListVar, newSelectedFacetValues);
 	facetedTableRemoveOpVars(ft, cart);
 	}
     return TRUE;
     }
 else
     return FALSE;
 }
 
 
 void doBody()
 {
 /* Fake up a 'track' for development */
 char *trackName = "cellFacetsJk1";
-char *trackName2 = "tableList";
 
 struct sqlConnection *conn = sqlConnect(database);
 struct hash *emptyHash = hashNew(0);
 struct facetedTable *ft = facetedTableNew("the original", trackName);
-struct facetedTable *ft2 = facetedTableNew("the other", trackName2);
 
 /* Write out html to pull in the other files we use. */
 facetedTableWebInit();
 
 /* Working within a form we save context */
 printf("<form action=\"../cgi-bin/hgFacetedBars\" name=\"facetForm\" method=\"GET\">\n");
 cartSaveSession(cart);
 
 /* Set up url that has enough context to get back to us.  This is very much a work in 
  * progress. */
 char returnUrl[PATH_LEN*2];
 safef(returnUrl, sizeof(returnUrl), "../cgi-bin/hgFacetedBars?%s",
     cartSidUrlString(cart) );
 
-/* If we got called by a click on a facet deal with that */
-
 /* Put up the big faceted search table */
 printf("<div>\n");
+char *statsFileName = "/gbdb/hg38/bbi/singleCellMerged/barChart.stats";
+char *requiredStatsFields[] = {"cluster","count","mean","organ","cell_class","stage","cell_type"};
+struct fieldedTable *table = fieldedTableFromTabFile(statsFileName, statsFileName, 
+    requiredStatsFields, ArraySize(requiredStatsFields));
 facetedTableUpdateOnFacetClick(ft, cart);
+
+/* Look up sel val in cart */
+char *selList = facetedTableSelList(ft, cart);
+struct facetField *ffArray[table->fieldCount];
+int selCount = 0;
+facetFieldsFromFieldedTable(table, selList, ffArray, &selCount);
+// uglyf("%d of %d selected in facets", selCount, table->rowCount);
+webFilteredFieldedTable(cart, table, 
+    "count,cluster,mean", returnUrl, trackName, 
+    32, emptyHash, NULL,
+    FALSE, NULL,
+    table->rowCount, 7,
+    NULL, emptyHash,
+    ffArray, "organ,cell_class,stage,cell_type",
+    NULL);
+
+#ifdef OLD
 webFilteredSqlTable(cart, conn, 
-    "cell_count,organ,cell_type", trackName, "", 
+    "organ,cell_class,cell_type", trackName, "", 
     returnUrl, trackName, 32, 
     emptyHash, NULL, 
     FALSE, NULL, 50, 7, emptyHash, "organ,cell_class,stage,cell_type",
     NULL);
+#endif /* OLD */
 printf("</div>\n");
 
-printf("<div>\n");
-facetedTableUpdateOnFacetClick(ft2, cart);
-webFilteredSqlTable(cart, conn, 
-    "tableName,field,type,nullAllowed", trackName2, "", 
-    returnUrl, trackName2, 32, 
-    emptyHash, NULL, 
-    FALSE, NULL, 50, 7, emptyHash, "type,field,tableName",
-    NULL);
-printf("</div>\n");
 
 /* Clean up and go home. */
 printf("</form>\n");
 hashFree(&emptyHash);
 sqlDisconnect(&conn);
 }
 
 void doMiddle(struct cart *theCart)
 /* Set up globals and make web page */
 {
 /* Set some major global variable and attach us to current genome and DB. */
 cart = theCart;
 getDbAndGenome(cart, &database, &genome, oldVars);
 initGenbankTableNames(database);